Внутренние компоненты MSBuild для проектов C++
Когда вы задаете свойства проекта в интегрированной среде разработки, а затем сохраняете проект, Visual Studio записывает параметры проекта в файл проекта. Файл проекта содержит параметры, уникальные для проекта. Однако он не содержит все параметры, необходимые для сборки проекта. Файл проекта содержит Import
элементы, содержащие сеть дополнительных файлов поддержки. Файлы поддержки содержат оставшиеся свойства, целевые объекты и параметры, необходимые для сборки проекта.
Большинство целевых объектов и свойств в файлах поддержки существуют исключительно для реализации системы построения. В этой статье рассматриваются полезные целевые объекты и свойства, которые можно указать в командной строке MSBuild. Чтобы найти дополнительные целевые объекты и свойства, просмотрите файлы в каталогах файлов поддержки.
Каталоги файлов поддержки
По умолчанию основные файлы поддержки Visual Studio расположены в указанных ниже каталогах. Эта информация зависит от версии.
Visual Studio 2022 и 2019
%VSINSTALLDIR%MSBuild\Microsoft\VC\<version>\
Содержит основные целевые файлы () и файлы свойств (
.targets
.props
), которые используются целевыми объектами. По умолчанию$(VCTargetsPath)
макрос ссылается на этот каталог. Заполнитель<version>
относится к версии Visual Studio: версии 170 для Visual Studio 2022, версии 160 для Visual Studio 2019 или версии 150 для Visual Studio 2017.%VSINSTALLDIR%MSBuild\Microsoft\VC\<version>\Platforms\<platform>\
Содержит файлы цель и свойство платформы, которые переопределяют целевые объекты и свойства в родительском каталоге. Этот каталог также содержит DLL-файл, который определяет задачи, используемые целевыми объектами в данном каталоге. Заполнитель
<platform>
представляет подкаталог ARM, ARM64, Win32 или x64.%VSINSTALLDIR%MSBuild\Microsoft\VC\<version>\Platforms\<platform>\PlatformToolsets\<toolset>\
Содержит каталоги, позволяющие сборке создавать приложения C++ с помощью указанного.
<toolset>
Заполнитель<platform>
представляет подкаталог ARM, ARM64, Win32 или x64. Заполнитель<toolset>
представляет подкаталог набора инструментов.
Visual Studio 2017
%VSINSTALLDIR%Common7\IDE\VC\VCTargets\
Содержит основные целевые файлы () и файлы свойств (
.targets
.props
), которые используются целевыми объектами. По умолчанию$(VCTargetsPath)
макрос ссылается на этот каталог.%VSINSTALLDIR%Common7\IDE\VC\VCTargets\Platforms\<platform>\
Содержит файлы цель и свойство платформы, которые переопределяют целевые объекты и свойства в родительском каталоге. Этот каталог также содержит DLL-файл, который определяет задачи, используемые целевыми объектами в данном каталоге. Заполнитель
<platform>
представляет подкаталог ARM, ARM64, Win32 или x64.%VSINSTALLDIR%Common7\IDE\VC\VCTargets\Platforms\<platform>\PlatformToolsets\<toolset>\
Содержит каталоги, позволяющие сборке создавать приложения C++ с помощью указанного.
<toolset>
Заполнитель<platform>
представляет подкаталог ARM, Win32 или x64. Заполнитель<toolset>
представляет подкаталог набора инструментов.
Visual Studio 2015 и более ранние версии
<drive>:\Program Files[ (x86)]\MSBuild\Microsoft.Cpp\v4.0\<version>\
Содержит основные целевые файлы () и файлы свойств (
.targets
.props
), которые используются целевыми объектами. По умолчанию макрос $(VCTargetsPath) ссылается на этот каталог.<drive>:\Program Files[ (x86)]\MSBuild\Microsoft.Cpp\v4.0\<version>\Platforms\<platform>\
Содержит файлы цель и свойство платформы, которые переопределяют целевые объекты и свойства в родительском каталоге. Этот каталог также содержит DLL-файл, который определяет задачи, используемые целевыми объектами в данном каталоге. Заполнитель
<platform>
представляет подкаталог ARM, Win32 или x64.<drive>:\Program Files[ (x86)]\MSBuild\Microsoft.Cpp\v4.0\<version>\Platforms\<platform>\PlatformToolsets\<toolset>\
Содержит каталоги, позволяющие сборке создавать приложения C++ с помощью указанного.
<toolset>
Заполнитель<version>
— V110 для Visual Studio 2012, V120 для Visual Studio 2013 и V140 для Visual Studio 2015. Заполнитель<platform>
представляет подкаталог ARM, Win32 или x64. Заполнитель<toolset>
представляет подкаталог набора инструментов. Например, это версия 140 для создания приложений Windows с помощью набора инструментов Visual Studio 2015. Кроме того, v120_xp сборку для Windows XP с помощью набора инструментов Visual Studio 2013.<drive>:\Program Files[ (x86)]\MSBuild\Microsoft.Cpp\v4.0\Platforms\<platform>\PlatformToolsets\<toolset>\
Пути, позволяющие сборке создавать приложения Visual Studio 2008 или Visual Studio 2010, не включают в
<version>
себя. В этих версиях<platform>
заполнитель представляет подкаталог Itanium, Win32 или x64. Заполнитель<toolset>
представляет подкаталог набора инструментов версии 90 или версии 100.
Файлы поддержки
Каталоги файлов поддержки содержат файлы со следующими расширениями:
Расширение | Description |
---|---|
.targets |
Содержит Target элементы XML, которые задают задачи, выполняемые целевым объектом. Может также содержать PropertyGroup , ItemGroup , ItemDefinitionGroup , и определяемых пользователем Item элементов, используемых для назначения параметров задачи файлы и параметры командной строки.Дополнительные сведения см. в разделе Target "Элемент (MSBuild)". |
.props |
Содержит Property Group и определяемых пользователем Property XML-элементов, укажите файл и параметры, которые используются во время построения.Может также содержать ItemDefinitionGroup и определяемых пользователем Item XML-элементы, задающие Дополнительные параметры. Элементы, определенные в группе определений элементов, похожи на свойства, но не могут быть доступны из командной строки. В файлах проекта Visual Studio для представления параметров часто вместо свойств используются элементы.Дополнительные сведения см. в разделе "Элемент (MSBuild)", ItemDefinitionGroup "Элемент " (MSBuild)" иItem "Элемент " (MSBuild)".ItemGroup |
.xml |
Содержит XML-элементы, которые объявляют и инициализируют элементы пользовательского интерфейса интегрированной среды разработки. Например, таблицы свойств, страницы свойств, элементы управления текстовым полем и элементы управления listbox. Файлы .xml напрямую поддерживают интегрированную среду разработки, а не MSBuild. Тем не менее присваиваются значения свойств интегрированной среды Разработки для создания свойств и элементов.Большинство .xml файлов находятся в подкаталоге языкового стандарта. Например, файлы для английского региона США находятся в $(VCTargetsPath)\1033\ . |
Пользовательские целевые объекты и свойства
Чтобы эффективно использовать MSBuild, он помогает узнать, какие свойства и целевые объекты полезны и релевантны. Большинство свойств и целевых объектов помогают реализовать систему сборки Visual Studio и не относятся к пользователю. В этом разделе описываются пользовательские свойства и целевые объекты, о которые стоит знать.
Свойство PlatformToolset
Свойство PlatformToolset
определяет, какой набор средств MSVC используется для сборки. По умолчанию используется текущий набор средств. Если это свойство задано, его значение объединяется с литеральными строками, чтобы сформировать путь. Это каталог, содержащий свойство и целевые файлы, необходимые для создания проекта для определенной платформы. Версия набора средств платформы, требуемая для сборки, должна быть установлена.
Например, чтобы использовать для сборки приложения средства и библиотеки Visual Studio 2015, присвойте свойству PlatformToolset
значение v140
:
msbuild myProject.vcxproj /p:PlatformToolset=v140
Свойство PreferredToolArchitecture
PreferredToolArchitecture
Свойство определяет 32-разрядной или 64-разрядных компилятора и средств, используются ли в сборке. Это свойство не влияет на архитектуру или конфигурацию выходной платформы. По умолчанию MSBuild использует версию компилятора и средств x86, если это свойство не задано.
Например, чтобы использовать для сборки приложения 64-разрядный компилятор и средства, присвойте свойству PreferredToolArchitecture
значение x64
:
msbuild myProject.vcxproj /p:PreferredToolArchitecture=x64
Свойство UseEnv
По умолчанию параметры для конкретной платформы для текущего проекта переопределяют PATH
переменные среды , , INCLUDE
, CONFIGURATION
LIB
LIBPATH
а также PLATFORM
переменные среды. UseEnv
Задайте свойство, чтобы true
гарантировать, что переменные среды не переопределяются.
msbuild myProject.vcxproj /p:UseEnv=true
Целевые объекты
Существуют сотни целевых объектов в файлах поддержки Visual Studio. Однако большинство являются целевых объектов, ориентированных на системы, пользователь может их игнорировать. Большинство системных целевых объектов префиксируются символом подчеркивания (_
) или имеют имя, начинающееся с PrepareFor
, Compute
, , Pre
Before
After
или .Post
В таблице ниже перечислены несколько полезных целевых объектов, ориентированных на пользователя.
Назначение | Description |
---|---|
BscMake |
Выполняет программу технического обслуживания microsoft Browse Information Maintenance, bscmake.exe . |
Build |
Выполняет построение проекта. Этот целевой объект используется по умолчанию для проекта. |
ClCompile |
Выполняет средство компилятора MSVC. cl.exe |
Clean |
Удаляет временные и промежуточные файлы сборки. |
Lib |
Выполняет средство lib.exe диспетчера библиотек Microsoft 32-разрядной версии. |
Link |
Выполняет средство компоновщика MSVC. link.exe |
ManifestResourceCompile |
Извлекает список ресурсов из манифеста, а затем выполняет средство компилятора ресурсов Microsoft Windows. rc.exe |
Midl |
Выполняет средство midl.exe компилятора языка определения интерфейса Майкрософт (MIDL). |
Rebuild |
Выполняет очистку, а затем выполняет построение проекта. |
ResourceCompile |
Выполняет средство компилятора ресурсов Microsoft Windows. rc.exe |
XdcMake |
Выполняет средство XML-документации, xdcmake.exe . |
Xsd |
Выполняет средство определения схемы XML, xsd.exe . См. примечание. |
Примечание.
В Visual Studio 2017 и более поздних версиях поддержка проектов C++ для .xsd
файлов не рекомендуется. Вы по-прежнему можете использовать Microsoft.VisualC.CppCodeProvider
, добавив CppCodeProvider.dll
вручную в GAC.
См. также
Справочник по задачам MSBuild
BscMake
задача
CL
задача
CPPClean
задача
LIB
задача
Link
задача
MIDL
задача
MT
задача
RC
задача
SetEnv
задача
VCMessage
задача
XDCMake
задача