Share via


Personalizar builds do C++

Para projetos C++, os arquivos personalizados .targets e .props não podem ser usados da mesma maneira para substituir as configurações padrão. Este artigo descreve uma maneira diferente de personalizar o build que funciona para builds C++.

O arquivo Directory.Build.props, útil para personalizar projetos .NET, é importado por Microsoft.Common.props, que é importado em Microsoft.Cpp.Default.props enquanto a maioria dos padrões são definidos em Microsoft.Cpp.props e para várias propriedades uma condição "se ainda não definida" não pode ser usada, pois a propriedade já está definida, mas o padrão precisa ser diferente para propriedades de projeto específicas definidas em PropertyGroup com Label="Configuration" (consulte estrutura de arquivo .vcxproj e .props).

Para projetos C++, você pode usar as seguintes propriedades para especificar arquivos .props a serem importados automaticamente antes/depois dos arquivos Microsoft.Cpp.*:

  • ForceImportAfterCppDefaultProps
  • ForceImportBeforeCppProps
  • ForceImportAfterCppProps
  • ForceImportBeforeCppTargets
  • ForceImportAfterCppTargets

Para personalizar os valores padrão das propriedades para todos os builds do C++, crie outro arquivo .props (por exemplo, MyProps.props) e defina 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.