vcpkg в проектах MSBuild
Методы интеграции
Интеграция на уровне пользователя
Чтобы использовать vcpkg в проектах MSBuild, выполните следующую команду:
vcpkg integrate install
Вам нужно выполнить vcpkg integrate install
команду только при первом включении интеграции MSBuild. Это позволяет интегрировать MSBuild для всех существующих и будущих проектов.
Если у вас несколько экземпляров vcpkg, можно использовать vcpkg integrate install
команду для обновления экземпляра vcpkg в MSBuild. Используется vcpkg integrate remove
для удаления интеграции на уровне пользователей MSBuild.
Этот метод интеграции автоматически добавляет пакеты, установленные vcpkg, в следующие свойства проекта: включить каталоги, каталоги ссылок и библиотеки ссылок. Кроме того, это создает действие после сборки, которое гарантирует, что все необходимые библиотеки DLL копируются в выходную папку сборки. Это работает для всех решений и проектов с помощью Visual Studio 2015 или более поздней версии.
Это все, что вам нужно сделать для подавляющего большинства библиотек. Однако некоторые библиотеки выполняют конфликтующие действия, такие как переопределения main()
. Так как необходимо выбрать один проект, который из этих конфликтующих параметров необходимо, необходимо вручную добавить эти библиотеки в входные данные компоновщика.
Ниже приведены некоторые примеры, в которых требуется связывание вручную (не исчерпывающий список):
- Gtest предоставляет
gtest
,gmock
gtest_main
иgmock_main
- Предоставляется SDL2
SDL2main
- SFML предоставляет
sfml-main
- Boost.Test предоставляет
boost_test_exec_monitor
Чтобы получить полный список для всех установленных пакетов, выполните команду vcpkg owns manual-link
.
Импорт .props
и .targets
vcpkg также можно интегрировать в проекты MSBuild, явно импортируя scripts/buildsystems/vcpkg.props
и scripts/buildsystems/vcpkg.targets
файлы в каждый .vcxproj
. Используя относительные пути, это позволяет vcpkg использовать подмодул и автоматически получать пользователями при выполнении git clone
.
Самый простой способ добавить их в каждый проект в решении — создать Directory.Build.props
и Directory.Build.targets
файлы в корне репозитория.
В следующих примерах предполагается, что они находятся в корне репозитория с подмодулой microsoft/vcpkg
at vcpkg
.
Пример: Directory.Build.props
.
<Project>
<Import Project="$(MSBuildThisFileDirectory)vcpkg\scripts\buildsystems\msbuild\vcpkg.props" />
</Project>
Пример: Directory.Build.targets
.
<Project>
<Import Project="$(MSBuildThisFileDirectory)vcpkg\scripts\buildsystems\msbuild\vcpkg.targets" />
</Project>
Дополнительные сведения Directory.Build.targets
см. в разделе "Настройка сборки" официальной документации ПО MSBuild.Directory.Build.props
Связанный пакет NuGet
Примечание.
Этот подход не рекомендуется для новых проектов, так как это затрудняет их совместное использование с другими пользователями. Переносимый автономный пакет NuGet см. в разделе export command
.
Проекты VS также можно интегрировать с помощью пакета NuGet. Это приведет к изменению файла проекта, поэтому мы не рекомендуем использовать этот подход для открытый код проектов.
PS D:\src\vcpkg> .\vcpkg integrate project
Created nupkg: D:\src\vcpkg\scripts\buildsystems\vcpkg.D.src.vcpkg.1.0.0.nupkg
With a project open, go to Tools->NuGet Package Manager->Package Manager Console and paste:
Install-Package vcpkg.D.src.vcpkg -Source "D:/src/vcpkg/scripts/buildsystems"
Примечание.
Созданный пакет NuGet не содержит фактические библиотеки. Вместо этого он действует как ярлык (или symlink) к установке vcpkg и будет "автоматически" обновляться с любыми изменениями (установка и удаление) в библиотеки. Вам не нужно повторно создавать или обновлять пакет NuGet.
Типичная настройка
VcpkgEnabled
(Использование Vcpkg)
Для этого можно задать значение false, чтобы явно отключить интеграцию vcpkg для проекта.
VcpkgConfiguration
(Конфигурация Vcpkg)
Если имена конфигурации слишком сложны, чтобы vcpkg правильно угадывать, вы можете назначить это свойство Release
или Debug
явно сообщить vcpkg, какой вариант библиотек вы хотите использовать.
VcpkgEnableManifest
(Использование манифеста Vcpkg)
Это свойство должно быть задано для true
использования из локального vcpkg.json
файла. Если задано значение false
, все локальные vcpkg.json
файлы будут игнорироваться.
В настоящее время это значение по умолчанию, но по умолчанию false
используется true
в будущем.
VcpkgTriplet
(Триплет)
Это свойство управляет тройным набором для использования библиотек, таких как x64-windows-static
или arm64-windows
.
Если это не задано явным образом, vcpkg выведет правильный триплет на основе параметров Visual Studio. vcpkg будет выводить только триплеты, использующие динамическую компоновку библиотеки и динамическую компоновку CRT; Если требуется статические зависимости или использовать статические CRT (/MT
), необходимо вручную задать триплет.
Вы можете увидеть автоматически выведенный триплет, задав для msBuild подробные сведения о нормальной или более поздней версии:
Сочетание клавиш: CTRL+Q "сборка и запуск"
Средства — параметры —>> проекты и решения —>> сборка и запуск проекта MSBuild — детализация выходных данных проекта MSBuild
См. также триплеты
VcpkgHostTriplet
(Триплет узла)
Для разрешения зависимостей узла можно задать настраиваемый триплет.
Если этот параметр не задан, по умолчанию используется триплет "native" (x64-windows).
См. также зависимости узлов.
VcpkgInstalledDir
(установленный каталог)
Это свойство определяет расположение vcpkg для установки и использования библиотек из.
В режиме манифеста это значение $(VcpkgManifestRoot)\vcpkg_installed\$(VcpkgTriplet)\
по умолчанию. В классическом режиме это значение $(VcpkgRoot)\installed\
по умолчанию.
VcpkgApplocalDeps
(Библиотеки DLL для локального развертывания приложений)
Это свойство включает или отключает обнаружение и копирование зависимых БИБЛИОТЕК DLL из установленного дерева vcpkg в выходной каталог проекта.
VcpkgXUseBuiltInApplocalDeps
(Используйте встроенное локальное развертывание приложений)
Это свойство, если это свойство включено, использует экспериментальную реализацию развертывания DLL vcpkg в локальном приложении при локальном развертывании БИБЛИОТЕК DLL приложения. Это свойство будет удалено и не действует, когда встроенная реализация больше не является экспериментальной.
Это свойство не влияет на $(VcpkgApplocalDeps)
значение false.
Конфигурация режима манифеста
Чтобы использовать манифесты (vcpkg.json
) с MSBuild, сначала необходимо использовать один из описанных выше методов интеграции. Затем добавьте vcpkg.json над файлом проекта (например, в корневом каталоге исходного репозитория) и задайте для свойства VcpkgEnableManifest
значение true
. Это свойство можно задать с помощью интегрированной среды разработки в свойствах>проекта Vcpkg>Использовать манифест Vcpkg. Чтобы просмотреть страницу свойств vcpkg, может потребоваться перезагрузить интегрированную среду разработки.
vcpkg будет выполняться во время сборки и установки всех перечисленных зависимостей vcpkg_installed/$(VcpkgTriplet)/
vcpkg.json
рядом с файлом. Эти библиотеки будут автоматически включены и связаны с проектами MSBuild.
Известные проблемы
- Visual Studio 2015 неправильно отслеживает изменения
vcpkg.json
в файлах иvcpkg-configuration.json
файлах и не будет реагировать на изменения, если.cpp
изменения не будут изменены.
VcpkgAdditionalInstallOptions
(Дополнительные параметры)
При использовании манифеста этот параметр задает дополнительные флаги командной строки для передачи в вызов базового средства vcpkg. Это можно использовать для доступа к функциям, которые еще не были предоставлены с помощью другого варианта.
VcpkgManifestInstall
(Установка зависимостей Vcpkg)
Это свойство можно задать для false
отключения автоматического восстановления зависимостей во время сборки проекта. Зависимости должны быть восстановлены вручную с помощью командной строки vcpkg отдельно.