Настройка сборок 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 всегда считывает среду и создает (или переопределяет) свойства для всех переменных среды.