Personalización de compilaciones de C++
En el caso de los proyectos de C++, los archivos .targets
y .props
personalizados no se pueden usar de la misma manera para invalidar la configuración predeterminada. En este artículo se describe una forma distinta de personalizar la compilación que funciona para las compilaciones de C++.
El archivo Directory.Build.props, que es útil para personalizar los proyectos de .NET, se importa mediante Microsoft.Common.props, que se importa en Microsoft.Cpp.Default.props
mientras que la mayoría de los valores predeterminados se definen en Microsoft.Cpp.props; además, para muchas propiedades, no se puede usar una condición "si aún no se ha definido", ya que la propiedad ya está definida, pero el valor predeterminado debe ser diferente para determinadas propiedades de proyecto definidas en PropertyGroup
con Label="Configuration"
(consulte Estructura de los archivos .vcxproj y .props).
Para los proyectos de C++, puede usar las propiedades siguientes para especificar que los archivos .props
se importen automáticamente antes o después de los archivos Microsoft.Cpp.*:
- ForceImportAfterCppDefaultProps
- ForceImportBeforeCppProps
- ForceImportAfterCppProps
- ForceImportBeforeCppTargets
- ForceImportAfterCppTargets
Para personalizar los valores predeterminados de las propiedades de todas las compilaciones de C++, cree otro archivo .props
(por ejemplo, MyProps.props) y defina la propiedad ForceImportAfterCppProps
en Directory.Build.props
apuntando 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.
Contenido relacionado
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de