Personnalisation des builds C++

Vous pouvez utiliser Directory.Build.props et Directory.Build.targets pour personnaliser tous les projets C++ sous un dossier parent commun. Consultez Personnaliser par dossier. De plus, les projets C++ fournissent les points d’extensibilité suivants. Vous pouvez utiliser les propriétés pour spécifier le(s) fichier(s) .props ou .targets à importer automatiquement avant ou après les fichiers Microsoft.Cpp.* :

  • ForceImportAfterCppDefaultProps
  • ForceImportBeforeCppProps
  • ForceImportAfterCppProps
  • ForceImportBeforeCppTargets
  • ForceImportAfterCppTargets

Ces importations permettent de contrôler la séquence des définitions des propriétés qui dépendent d’autres propriétés ou cibles qui dépendent d’autres cibles. La séquence d’importations dans un .vcxproj ressemble à ceci :

   vcxproj
      Microsoft.Cpp.default.props
         Microsoft.Common.props
            Directory.Build.props
      Microsoft.Cpp.props
      Microsoft.Cpp.targets
         Microsoft.Common.targets
            Directory.Build.targets

Consultez Structure des fichiers .vcxproj et .props. Si vous devez définir des propriétés qui utilisent d’autres propriétés définies dans Microsoft.Cpp.default.props ou Microsoft.Cpp.props, vous pouvez créer un autre fichier .props (par exemple, MyProps.props) et définir la propriété ForceImportAfterCppProps dans Directory.Build.props indiquant vers celle-ci :

<PropertyGroup>
  <ForceImportAfterCppProps>$(MSBuildThisFileDirectory)\MyProps.props</ForceImportAfterCppProps>
</PropertyGroup>

MyProps.props est automatiquement importé à la toute fin de Microsoft.Cpp.props.

Personnalisation de toutes les builds C++

Nous vous déconseillons de personnaliser l’installation de Visual Studio, car il n’est pas facile d’effectuer le suivi de ces personnalisations. Si toutefois vous étendez Visual Studio afin de personnaliser les builds C++ pour une plateforme particulière, vous pouvez créer des fichiers .targets pour chaque plateforme et les placer dans les dossiers d’importation correspondant à ces plateformes dans l’extension Visual Studio.

Le fichier .targets de la plateforme Win32, Microsoft.Cpp.Win32.targets, contient l’élément Import suivant :

<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportBefore\*.targets"
        Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportBefore')"
/>

Il existe un élément similaire à la fin du même fichier :

<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportAfter\*.targets"
        Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportAfter')"
/>

Des éléments d’importation similaires existent pour d’autres plateformes cibles dans *%ProgramFiles32%\MSBuild\Microsoft.Cpp\v{version}\Platforms*.

Une fois le fichier .targets inséré dans le dossier ImportAfter approprié en fonction de la plateforme, MSBuild importe le fichier en question dans chaque build C++ de cette plateforme. Vous pouvez y placer plusieurs fichiers .targets si nécessaire.

À l’aide de l’extensibilité de Visual Studio, d’autres personnalisations sont possibles, notamment définir une nouvelle plateforme. Pour plus d’informations, consultez Extensibilité du projet C++.

Spécification d’une importation personnalisée en ligne de commande

Pour les fichiers .targets personnalisés que vous souhaitez inclure dans une build spécifique d’un projet C++, définissez une propriété ForceImportBeforeCppTargets ou ForceImportAfterCppTargets (ou les deux) en ligne de commande.

msbuild /p:ForceImportBeforeCppTargets="C:\build\config\Custom.Before.Microsoft.Cpp.Targets" MyCppProject.vcxproj

Dans le cas d’un paramètre global (pour affecter, par exemple, toutes les builds C++ d’une plateforme sur un serveur de build), il existe deux méthodes. Tout d’abord, vous pouvez configurer ces propriétés à l’aide d’une variable d’environnement système qui est toujours définie. Cette technique fonctionne, car MSBuild lit systématiquement l’environnement et crée (ou remplace) les propriétés pour toutes les variables d’environnement.