C++ 빌드 사용자 지정

C++ 프로젝트의 경우 사용자 지정 .targets.props 파일을 같은 방법으로 사용하여 기본 설정을 재정의할 수 없습니다. 이 문서에서는 C++ 빌드에 대해 작동하는 빌드를 사용자 지정하는 다른 방법을 설명합니다.

.NET 프로젝트를 사용자 지정하는데 유용한 Directory.Build.props 파일은 Microsoft.Common.props에서 가져옵니다. 후자 파일은 Microsoft.Cpp.Default.props에서 가져오지만 대부분의 기본값은 Microsoft.Cpp.props에서 정의되고, 많은 속성에서 속성이 이미 정의되어 있으므로 '아직 정의되지 않은 경우' 조건을 사용할 수 없지만 PropertyGroup에 정의된 특정 프로젝트 속성의 기본값은 Label="Configuration"과 달라야 합니다(.vcxproj 및 .props 파일 구조 참조).

C++ 프로젝트의 경우 다음 속성을 사용하여 .props 파일을 Microsoft.Cpp.* 파일 전/후에 자동으로 가져오도록 지정할 수 있습니다.

  • ForceImportAfterCppDefaultProps
  • ForceImportBeforeCppProps
  • ForceImportAfterCppProps
  • ForceImportBeforeCppTargets
  • ForceImportAfterCppTargets

모든 C++ 빌드의 속성 기본값을 사용자 지정하려면 다른 .props 파일(예: MyProps.props)을 만들고 Directory.Build.propsForceImportAfterCppProps 속성이 이 파일을 가리키도록 정의합니다.

<PropertyGroup>
  <ForceImportAfterCppProps>$(MsbuildThisFileDirectory)\MyProps.props</ForceImportAfterCppProps>
</PropertyGroup>

MyProps.propsMicrosoft.Cpp.props의 맨 끝에서 자동으로 가져옵니다.

모든 C++ 빌드 사용자 지정

Visual Studio 설치 사용자 지정은 해당 사용자 지정을 추적하기 쉽지 않아서 권장되지 않지만, Visual Studio를 확장하여 특정 플랫폼의 C++ 빌드를 사용자 지정하는 경우 각 플랫폼의 .targets 파일을 만들어 해당 플랫폼의 적절한 가져오기 폴더에 Visual Studio 확장의 일부로 배치할 수 있습니다.

Win32 플랫폼용 .targets 파일인 Microsoft.Cpp.Win32.targets에는 다음 Import 요소가 포함되어 있습니다.

<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportBefore\*.targets"
        Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportBefore')"
/>

같은 파일의 끝에는 비슷한 요소가 있습니다.

<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportAfter\*.targets"
        Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportAfter')"
/>

*%ProgramFiles32%\MSBuild\Microsoft.Cpp\v{version}\Platforms*에는 다른 대상 플랫폼을 위한 비슷한 import 요소가 있습니다.

플랫폼에 따라 적절한 ImportAfter 폴더에 .targets 파일을 배치하면 MSBuild는 해당 플랫폼의 모든 C++ 빌드에 해당 파일을 가져옵니다. 필요한 경우, 여기에 여러 .targets 파일을 넣을 수 있습니다.

Visual Studio 확장성을 사용하여 새 플랫폼을 정의하는 등의 추가 사용자 지정을 수행할 수 있습니다. 자세한 내용은 C++ 프로젝트 확장성을 참조하세요.

명령줄에서 사용자 지정 가져오기 지정

C++ 프로젝트의 특정 빌드에 포함하려는 사용자 지정 .targets의 경우 명령줄에서 ForceImportBeforeCppTargets 속성과 ForceImportAfterCppTargets 속성 중 하나 또는 둘 모두를 설정합니다.

msbuild /p:ForceImportBeforeCppTargets="C:\build\config\Custom.Before.Microsoft.Cpp.Targets" MyCppProject.vcxproj

(예를 들어 빌드 서버의 플랫폼에 대한 모든 C++ 빌드에 영향을 주기 위한) 전역 설정의 경우, 두 가지 방법이 있습니다. 첫째, 항상 설정되어 있는 시스템 환경 변수를 사용하여 이러한 속성을 설정할 수 있습니다. MSBuild는 항상 환경을 읽고 모든 환경 변수의 속성을 만들거나 재정의하기 때문에 이 방법은 효과적입니다.