Share via


Personnalisation des builds C++

Dans les projets C++, les fichiers personnalisés .targets et .props ne peuvent pas être utilisés de la même façon pour remplacer les paramètres par défaut. Cet article décrit une autre méthode de personnalisation qui fonctionne avec les builds C++.

Le fichier Directory.Build.props qui est utile pour personnaliser les projets .NET est importé par Microsoft.Common.props, qui est importé dans Microsoft.Cpp.Default.props, alors que la plupart des valeurs par défaut sont spécifiées dans Microsoft.Cpp.props. Pour un certain nombre de propriétés, il n’est pas possible d’utiliser une condition « si non définie pour l’instant » (car la propriété est déjà définie), mais la valeur par défaut doit être différente pour les propriétés de projet définies dans PropertyGroup avec Label="Configuration" (voir Structure de fichiers .vcxproj et .props).

Pour les projets C++, vous pouvez utiliser les propriétés suivantes pour spécifier le ou les fichiers .props à importer automatiquement avant et après les fichiers Microsoft.Cpp.* :

  • ForceImportAfterCppDefaultProps
  • ForceImportBeforeCppProps
  • ForceImportAfterCppProps
  • ForceImportBeforeCppTargets
  • ForceImportAfterCppTargets

Pour personnaliser la valeur par défaut des propriétés de toutes les builds C++, créez un autre fichier .props (par exemple MyProps.props) et définissez la propriété ForceImportAfterCppProps de Directory.Build.props pointant vers celui-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.