Personalización de compilaciones de C++
Puede usar Directory.Build.props y Directory.Build.targets para personalizar todos los proyectos de C++ en una carpeta principal común. Consulte Personalizar por carpeta. Además, los proyectos de C++ proporcionan los siguientes puntos de extensibilidad. Puede utilizar propiedades para especificar que los archivos .props
o .targets
se importen automáticamente antes o después de los archivos Microsoft.Cpp.*:
- ForceImportAfterCppDefaultProps
- ForceImportBeforeCppProps
- ForceImportAfterCppProps
- ForceImportBeforeCppTargets
- ForceImportAfterCppTargets
Estas importaciones proporcionan control sobre la secuencia de las definiciones de propiedades que dependen de otras propiedades o destinos que dependen de otros destinos. La secuencia de importaciones en un .vcxproj
tiene un aspecto similar al siguiente:
vcxproj
Microsoft.Cpp.default.props
Microsoft.Common.props
Directory.Build.props
Microsoft.Cpp.props
Microsoft.Cpp.targets
Microsoft.Common.targets
Directory.Build.targets
Consulte Estructura de los archivos .vcxproj y .props. Si necesita definir propiedades que usen otras propiedades definidas en Microsoft.Cpp.default.props o Microsoft.Cpp.props, puede crear otro archivo .props
(por ejemplo, MyProps.props) y definir la propiedad ForceImportAfterCppProps
en Directory.Build.props
que apunta a él:
<PropertyGroup>
<ForceImportAfterCppProps>$(MSBuildThisFileDirectory)\MyProps.props</ForceImportAfterCppProps>
</PropertyGroup>
MyProps.props se importará automáticamente al final de Microsoft.Cpp.props.
Personalización de todas las compilaciones de C++
No se recomienda personalizar la instalación de Visual Studio, ya que no es fácil realizar un seguimiento de estas personalizaciones, pero si está ampliando Visual Studio para personalizar las compilaciones de C++ para una plataforma determinada, puede crear archivos de .targets
para cada plataforma y colocarlos en las carpetas de importación correspondientes a esas plataformas como parte de una extensión de Visual Studio.
El archivo .targets
para la plataforma Win32, Microsoft.Cpp.Win32.targets, contiene el siguiente elemento Import
:
<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportBefore\*.targets"
Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportBefore')"
/>
Hay un elemento similar cerca del final del mismo archivo:
<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportAfter\*.targets"
Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportAfter')"
/>
Existen elementos de importación similares para otras plataformas de destino en *%ProgramFiles32%\MSBuild\Microsoft.Cpp\v{version}\Platforms*.
Una vez que coloque el archivo .targets
en la carpeta ImportAfter
correspondiente según la plataforma, MSBuild importará el archivo en cada compilación de C++ de esa plataforma. Puede colocar ahí varios archivos de .targets
, si es necesario.
Con Extensibilidad de Visual Studio, pueden realizarse más personalizaciones, como la definición de una nueva plataforma. Para obtener más información, consulte Extensibilidad de proyectos de C++.
Especificación de una importación personalizada en la línea de comandos
En el caso de los .targets
personalizados que desee incluir para una compilación específica de un proyecto de C++, establezca una o las dos propiedades ForceImportBeforeCppTargets
y ForceImportAfterCppTargets
en la línea de comandos.
msbuild /p:ForceImportBeforeCppTargets="C:\build\config\Custom.Before.Microsoft.Cpp.Targets" MyCppProject.vcxproj
En el caso de una configuración global (para incidir, por ejemplo, en todas las compilaciones de C++ de una plataforma en un servidor de compilación), hay dos métodos. En primer lugar, puede establecer estas propiedades mediante una variable de entorno del sistema que siempre se establece. Esta técnica funciona porque MSBuild siempre lee el entorno y crea (o invalida) propiedades para todas las variables de entorno.