Personalizar builds do C++

É possível usar Directory.Build.props e Directory.Build.targets para personalizar todos os projetos C++ em uma pasta pai em comum. Consulte Personalizar por pasta. Além disso, projetos C++ fornecem os seguintes pontos de extensibilidade. Você pode usar propriedades para especificar arquivos .props ou .targets a serem importados automaticamente antes/depois dos arquivos Microsoft.Cpp.*:

  • ForceImportAfterCppDefaultProps
  • ForceImportBeforeCppProps
  • ForceImportAfterCppProps
  • ForceImportBeforeCppTargets
  • ForceImportAfterCppTargets

Essas importações fornecem controle sobre a sequência das definições de propriedades que dependem de outras propriedades ou destinos que dependem de outros destinos. A sequência de importações em um .vcxproj tem a seguinte aparência:

   vcxproj
      Microsoft.Cpp.default.props
         Microsoft.Common.props
            Directory.Build.props
      Microsoft.Cpp.props
      Microsoft.Cpp.targets
         Microsoft.Common.targets
            Directory.Build.targets

Consulte Estrutura de arquivos .vcxproj e .props. Se precisar definir propriedades que usam outras propriedades definidas em Microsoft.Cpp.default.props ou Microsoft.Cpp.props, você poderá criar outro arquivo .props (digamos, MyProps.props) e definir a propriedade ForceImportAfterCppProps em Directory.Build.props apontando para ele:

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

MyProps.props será importado automaticamente no final do Microsoft.Cpp.props.

Personalizar todos os builds do C++

A personalização da instalação do Visual Studio não é recomendada, pois não é fácil acompanhar essas personalizações, mas se você estiver estendendo o Visual Studio para personalizar builds do C++ para uma plataforma específica, poderá criar arquivos .targets para cada plataforma e colocá-los nas pastas de importação apropriadas para essas plataformas como parte de uma extensão do Visual Studio.

O arquivo .targets para a plataforma Win32, Microsoft.Cpp.Win32.targets, contém o seguinte elemento Import:

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

Há um elemento semelhante próximo ao final do mesmo arquivo:

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

Existem elementos de importação semelhantes para outras plataformas de destino em *%ProgramFiles32%\MSBuild\Microsoft.Cpp\v{version}\Platforms*.

Depois de colocar o arquivo .targets na pasta apropriada ImportAfter de acordo com a plataforma, o MSBuild importa seu arquivo para cada build do C++ para aquela plataforma. Você pode colocar vários arquivos .targets lá, se necessário.

Usando a Extensibilidade do Visual Studio, outras personalizações são possíveis, como definir uma nova plataforma. Para obter mais informações, consulte Extensibilidade de projeto do C++.

Especificar uma importação personalizada na linha de comando

Para o .targets personalizado que você deseja incluir para um build específico de um projeto do C++, defina uma ou ambas as propriedades ForceImportBeforeCppTargets e ForceImportAfterCppTargets na linha de comando.

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

Para uma configuração global (para afetar, digamos, todos os builds do C++ para uma plataforma em um servidor do build), há dois métodos. Primeiro, você pode definir essas propriedades usando uma variável de ambiente do sistema que está sempre definida. Essa técnica funciona porque o MSBuild sempre lê o ambiente e cria (ou substitui) propriedades para todas as variáveis de ambiente.