Udostępnij za pośrednictwem


Dostosowywanie kompilacji języka C++

Można użyć directory.Build.props i Directory.Build.targets , aby dostosować wszystkie projekty języka C++ w typowym folderze nadrzędnym. Zobacz Dostosowywanie według folderu. Ponadto projekty języka C++ zapewniają następujące punkty rozszerzalności. Za pomocą właściwości można określić .props pliki lub .targets pliki do automatycznego zaimportowania przed plikiem Microsoft.Cpp.* lub po nich:

  • ForceImportAfterCppDefaultProps
  • ForceImportBeforeCppProps
  • ForceImportAfterCppProps
  • ForceImportBeforeCppTargets
  • ForceImportAfterCppTargets

Importy te zapewniają kontrolę nad sekwencją definicji właściwości, które zależą od innych właściwości lub obiektów docelowych, które zależą od innych obiektów docelowych. Sekwencja importu w obiekcie .vcxproj wygląda następująco:

   Vcxproj
      Microsoft.Cpp.default.props
         Microsoft.Common.props
            Directory.Build.props
      Microsoft.Cpp.props
      Microsoft.Cpp.targets
         Microsoft.common.targets
            Directory.Build.targets

Zobacz strukturę plików .vcxproj i .props. Jeśli musisz zdefiniować właściwości korzystające z innych właściwości zdefiniowanych w pliku Microsoft.Cpp.default.props lub Microsoft.Cpp.props, możesz utworzyć inny .props plik (np. MyProps.props) i zdefiniować 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.