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.props
programie , 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.
Powiązana zawartość
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla