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, gmockgtest_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 отдельно.