vcpkg предлагает простую интеграцию с CMake, чтобы сделать установленные пакеты доступными в проектах автоматически. Механизм интеграции vcpkg заключается в предоставлении файла цепочки инструментов CMake.
При первом настройке проекта CMake выполняет внутренние процедуры поиска, чтобы найти жизнеспособную цепочку инструментов (компилятор, компоновщик и т. д.). Этот поиск выполняется в функции в вашей системе project()CMakeLists.txt.
Чтобы настроить процесс выбора цепочки инструментов, CMake поддерживает использование пользовательских скриптов CMake-language, известных как файлы цепочки инструментов. Файл цепочки инструментов указывается путем задания переменной CMAKE_TOOLCHAIN_FILE . CMake вычисляет содержимое предоставленного скрипта цепочки инструментов и задает определения переменных, пути к необходимым средствам сборки и другим параметрам сборки, таким как флаги кросс-компиляции, соответственно.
При использовании CMAKE_TOOLCHAIN_FILE цепочки инструментов vcpkg (<vcpkg-root>/scripts/buildsystems/vcpkg.cmake) vcpkg использует механизм цепочки инструментов для внедрения кода для интеграции со встроенными функциями CMake прозрачно.
Вы по-прежнему можете использовать файл цепочки инструментов для настройки собственных наборов инструментов с помощью тройной переменной VCPKG_CHAINLOAD_TOOLCHAIN_FILE .
Интеграция vcpkg работает по-разному в зависимости от используемого режима работы:
В классическом режиме vcpkg устанавливает пути поиска CMake соответствующим образом, чтобы сделать установленные пакеты доступными через find_package()функции find_library()и find_path() функции.
В режиме манифеста, помимо приведенного выше, цепочка инструментов обнаруживает файлы манифеста (vcpkg.json файлы) и запускается vcpkg install для автоматического получения зависимостей проекта.
Так как файл цепочки инструментов вычисляется во время project() вызова, все переменные уровня CMake, изменяющие параметр vcpkg, должны быть заданы перед первым вызовом project(). Также может потребоваться перенастроить проект CMake, если изменить любой параметр vcpkg, который приводит к изменениям хэша ABI.
Если вы установили CMAKE_TOOLCHAIN_FILE в CMakeList.txt файле, убедитесь, что переменная задана перед вызовами project().
Проекты, настроенные для использования цепочки инструментов vcpkg (с помощью параметра CMAKE_TOOLCHAIN_FILECMake), могут находить библиотеки из vcpkg с помощью стандартных функций CMake: find_package(), find_path()и find_library().
Рекомендуется использовать предустановки CMake, чтобы указать файл цепочки инструментов. Например, если вы определили переменную VCPKG_ROOTсреды, можно использовать следующее CMakePresets.json и передать --preset debug строку настройки:
Если вам нужно использовать абсолютный путь для vcpkg, характерный для текущего компьютера, можно использовать CMakeUserPresets.json и добавить его в .gitignore файл.
vcpkg поддерживает собственные механизмы CMake для поиска библиотек: find_package(), find_library()и find_path(). При установке библиотек с определенной поддержкой CMake vcpkg отобразит сведения об использовании библиотеки:
The package zlib is compatible with built-in CMake targets:
find_package(ZLIB REQUIRED)
target_link_libraries(main PRIVATE ZLIB::ZLIB)
vcpkg не добавляет в проект пути включения или ссылок автоматически. Чтобы использовать библиотеку только заголовков, можно использовать find_path() , которая будет правильно работать на всех платформах:
# To find and use catch2
find_path(CATCH_INCLUDE_DIR NAMES catch.hpp PATH_SUFFIXES catch2)
target_include_directories(main PRIVATE ${CATCH_INCLUDE_DIR})
Интеграция с IDE
Visual Studio или Visual Studio Code
Рекомендуется использовать предустановки CMake как в Visual Studio, так и в Visual Studio Code.
Откройте параметры цепочки инструментов (File > Settings в Windows и Linux, CLion > Preferences в macOS) и перейдите к параметрам CMake (Build, Execution, Deployment > CMake). Добавьте CMake optionsследующую строку:
Эту строку необходимо добавить в каждый профиль отдельно.
Использование нескольких файлов цепочки инструментов
Чтобы объединить файл цепочки инструментов vcpkg с другим файлом цепочки инструментов, можно задать переменную VCPKG_CHAINLOAD_TOOLCHAIN_FILEкэша CMake:
vcpkg не применяет параметры цепочки инструментов автоматически, такие как компилятор или флаги компиляции, при создании библиотек. Чтобы изменить параметры библиотеки vcpkg, необходимо создать пользовательский тройной файл (который может предоставить общий доступ к цепочке инструментов)**
Справочник по параметрам
Все переменные, влияющие на vcpkg, должны быть определены перед первой project() директивой, например в CMakePresets.json"cacheVariables" карте, с помощью командной строки или set() инструкций.
VCPKG_TARGET_TRIPLET
Этот параметр управляет триплетом vcpkg, из который будут устанавливаться и потреблять библиотеки.
Если не задано, vcpkg автоматически обнаружит соответствующую тройную часть по умолчанию с учетом текущих параметров компилятора. При изменении этой переменной CMake необходимо удалить кэш и перенастроить его.
Эта переменная управляет активацией функций по умолчанию в дополнение к перечисленным в VCPKG_MANIFEST_FEATURES. Если задано значение ON, функции по умолчанию не будут автоматически активированы.
По умолчанию — OFF.
VCPKG_INSTALL_OPTIONS
Эту переменную можно задать в списке дополнительных параметров командной строки для передачи средству vcpkg во время автоматической установки.
VCPKG_PREFER_SYSTEM_LIBS
Предупреждение
Эта функция является устаревшей. Вместо этого используйте пустые порты наложения.
Эта переменная определяет, будет ли vcpkg добавляться вместо предустановки путей CMAKE_PREFIX_PATHк и CMAKE_LIBRARY_PATHCMAKE_FIND_ROOT_PATH поэтому библиотеки и пакеты vcpkg будут найдены после цепочки инструментов, системных библиотек и пакетов.
По умолчанию — OFF.
VCPKG_FEATURE_FLAGS
Эта переменная может быть задана в список флагов компонентов, которые передаются средству vcpkg во время автоматической установки, чтобы принять участие в экспериментальном поведении.
Дополнительные сведения см. в параметре командной --feature-flags= строки.
VCPKG_TRACE_FIND_PACKAGE
Если задано значение ON, печать каждого вызова find_package. Вложенные вызовы (например, через find_dependency) отступируются в соответствии с глубиной вложения.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о vcpkg
vcpkg — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Azure HPC — это специально разработанная облачная возможность для рабочей нагрузки HPC и ИИ, использующая современные отраслевые процессоры и обмен данными по сети InfiniBand для обеспечения максимальной производительности, масштабируемости и ценности приложений. Azure HPC позволяет реализовывать инновации, повышать продуктивность и развивать гибкость бизнеса за счет высокодоступного набора технологий HPC и ИИ с возможностью их динамического распределения в соответствии с изменением коммерческих и техническ