Compartir a través de


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.