Dostosowywanie kompilacji języka C++

W przypadku projektów języka C++ pliki niestandardowe .targets i .props nie mogą być używane w taki sam sposób, aby zastąpić ustawienia domyślne. W tym artykule opisano inny sposób dostosowywania kompilacji, która działa na potrzeby kompilacji języka C++.

Plik Directory.Build.props, który jest przydatny do dostosowywania projektów .NET, jest importowany przez microsoft.Common.props, który jest importowany w Microsoft.Cpp.Default.propsprogramie , podczas gdy większość wartości domyślnych jest definiowana w programie Microsoft.Cpp.props, a dla wielu właściwości nie można użyć warunku "jeśli jeszcze nie zdefiniowano", ponieważ właściwość jest już zdefiniowana, ale wartość domyślna musi być inna dla określonych właściwości projektu zdefiniowanych Label="Configuration"PropertyGroup w programie (zobacz .vcxproj i .props struktury plików).

W przypadku projektów C++ można użyć następujących właściwości, aby określić .props pliki, które mają być automatycznie importowane przed/po plikach Microsoft.Cpp.* :

  • ForceImportAfterCppDefaultProps
  • ForceImportBeforeCppProps
  • ForceImportAfterCppProps
  • ForceImportBeforeCppTargets
  • ForceImportAfterCppTargets

Aby dostosować domyślne wartości właściwości dla wszystkich kompilacji języka C++, utwórz inny .props plik (np . MyProps.props) i zdefiniuj ForceImportAfterCppProps właściwość wskazującą Directory.Build.props na nią:

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

Plik MyProps.props zostanie automatycznie zaimportowany na samym końcu pliku Microsoft.Cpp.props.

Dostosowywanie wszystkich kompilacji języka C++

Dostosowywanie instalacji programu Visual Studio nie jest zalecane, ponieważ śledzenie takich dostosowań nie jest łatwe, ale jeśli rozszerzasz program Visual Studio w celu dostosowania kompilacji języka C++ dla określonej platformy, możesz tworzyć .targets pliki dla każdej platformy i umieszczać je w odpowiednich folderach importu dla tych platform w ramach rozszerzenia programu Visual Studio.

Plik .targets dla platformy Win32 Microsoft.Cpp.Win32.targets zawiera następujący Import element:

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

Na końcu tego samego pliku znajduje się podobny element:

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

Podobne elementy importu istnieją dla innych platform docelowych w folderze *%ProgramFiles32%\MSBuild\Microsoft.Cpp\v{version}\Platforms*.

Po wprowadzeniu .targets pliku w odpowiednim ImportAfter folderze zgodnie z platformą program MSBuild zaimportuje plik do każdej kompilacji języka C++ dla tej platformy. W razie potrzeby można umieścić tam wiele .targets plików.

Dzięki rozszerzalności programu Visual Studio możliwe są dalsze dostosowania, takie jak definiowanie nowej platformy. Aby uzyskać więcej informacji, zobacz Rozszerzalność projektu C++.

Określanie niestandardowego importu w wierszu polecenia

W przypadku niestandardowego .targets , który chcesz uwzględnić dla określonej kompilacji projektu języka C++, ustaw jedną lub obie właściwości ForceImportBeforeCppTargets i ForceImportAfterCppTargets w wierszu polecenia.

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

Dla ustawienia globalnego (na przykład wszystkie kompilacje języka C++ dla platformy na serwerze kompilacji) istnieją dwie metody. Najpierw można ustawić te właściwości przy użyciu zmiennej środowiskowej systemu, która jest zawsze ustawiana. Ta technika działa, ponieważ program MSBuild zawsze odczytuje środowisko i tworzy (lub zastępuje) właściwości dla wszystkich zmiennych środowiskowych.