Настройка сборок C++
Вы можете использовать Directory.Build.props и Directory.Build.targets для настройки всех проектов C++ в общей родительской папке. См. раздел "Настройка по папке". Кроме того, проекты C++ предоставляют следующие точки расширяемости. Свойства можно использовать для указания .props
или .targets
автоматического импорта файлов до или после файлов Microsoft.Cpp.* :
- ForceImportAfterCppDefaultProps
- ForceImportBeforeCppProps
- ForceImportAfterCppProps
- ForceImportBeforeCppTargets
- ForceImportAfterCppTargets
Эти импорты обеспечивают контроль над последовательностью определений свойств, которые зависят от других свойств или целевых объектов, зависящих от других целевых объектов. Последовательность импорта в .vcxproj
следующем виде выглядит следующим образом:
Vcxproj
Microsoft.Cpp.default.props
Microsoft.Common.props
Directory.Build.props
Microsoft.Cpp.props
Microsoft.Cpp.targets
Microsoft.Common.targets
Directory.Build.targets
См . структуру файлов .vcxproj и props. Если необходимо определить свойства, использующие другие свойства, определенные в Microsoft.Cpp.default.props или Microsoft.Cpp.props, можно создать другой .props
файл (например, MyProps.props) и определить ForceImportAfterCppProps
свойство, Directory.Build.props
указывающее на него:
<PropertyGroup>
<ForceImportAfterCppProps>$(MSBuildThisFileDirectory)\MyProps.props</ForceImportAfterCppProps>
</PropertyGroup>
Файл MyProps.props будет автоматически импортироваться после файла Microsoft.Cpp.props.
Настройка всех сборок C++
Настраивать установку Visual Studio не рекомендуется, поскольку отслеживать вносимые при этом изменения достаточно сложно. Тем не менее, если вы расширяете возможности Visual Studio, чтобы настроить сборки C++ для конкретных платформ, можно создать файлы .targets
для каждой платформы и поместить их в соответствующие папки импорта в рамках расширения Visual Studio.
Файл .targets
для платформы Win32 Microsoft.Cpp.Win32.targets содержит следующий элемент Import
.
<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportBefore\*.targets"
Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportBefore')"
/>
Рядом с концом того же файла находится похожий элемент.
<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportAfter\*.targets"
Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportAfter')"
/>
Аналогичные элементы импорта существуют и для других целевых платформ в *%ProgramFiles32%\MSBuild\Microsoft.Cpp\v{version}\Platforms*.
После того как вы поместили файл .targets
в соответствующую папку ImportAfter
для платформы, MSBuild импортирует ваш файл в каждую сборку C++ для этой платформы. При необходимости в нем можно разместить несколько файлов .targets
.
Благодаря расширяемости Visual Studio вы можете выполнять дополнительные настройки, например определять новую платформу. Дополнительные сведения см. в статье Расширяемость проектов C++.
Указание пользовательского импорта в командной строке
Для пользовательских .targets
, которые необходимо включить в определенную сборку проекта C++, установите одно или оба свойства ForceImportBeforeCppTargets
и ForceImportAfterCppTargets
в командной строке.
msbuild /p:ForceImportBeforeCppTargets="C:\build\config\Custom.Before.Microsoft.Cpp.Targets" MyCppProject.vcxproj
Для глобальных параметров (например, для влияния на все сборки C++ для платформы на сервере сборки) существует два метода. Во-первых, эти свойства можно задать с помощью системной переменной среды, которая всегда задается. Этот метод работает, так как MSBuild всегда считывает среду и создает (или переопределяет) свойства для всех переменных среды.