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.