有关使用 CMake 的完全工作示例,请参阅 安装和使用包示例:sqlite

CMAKE_TOOLCHAIN_FILE

配置为通过 CMake 设置 CMAKE_TOOLCHAIN_FILE 使用 vcpkg 工具链文件 (的项目) 可以使用标准 CMake 函数从 vcpkg 查找库: find_package() find_path() find_library()

建议使用 CMake 预设 来指定工具链文件。 例如,如果已定义环境变量 VCPKG_ROOT ,则可以使用以下命令 CMakePresets.json 并在配置行上传递 --preset debug

"version": 3, "configurePresets": [ "name": "debug", "toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
cmake -B build -S /my/project --preset debug

如果需要使用特定于当前计算机的 vcpkg 的绝对路径,可以使用 CMakeUserPresets.json 它并将其添加到文件中 .gitignore

"version": 3, "configurePresets": [ "name": "debug", "toolchainFile": "C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake"

低于 3.19 的 CMake 版本必须在配置命令行上传递工具链文件:

cmake ../my/project -DCMAKE_TOOLCHAIN_FILE=<vcpkg-root>/scripts/buildsystems/vcpkg.cmake

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)
include_directories(${CATCH_INCLUDE_DIR})

IDE 集成

Visual Studio / Visual Studio Code

建议在 Visual Studio 和 Visual Studio Code 中使用 CMake 预设

有关详细信息,请参阅在 Visual Studio 中使用 CMake 预设配置和生成在 Visual Studio Code 中使用 CMake 预设进行配置和生成

CLion

在 Windows 和 Linux 上、 CLion > Preferences macOS) File > Settings上打开工具链设置 (,然后转到 CMake 设置 (Build, Execution, Deployment > CMake) 。 在 中 CMake options,添加以下行:

-DCMAKE_TOOLCHAIN_FILE=<vcpkg-root>/scripts/buildsystems/vcpkg.cmake

必须单独向每个配置文件添加此行。

使用多个工具链文件

若要将 vcpkg 的工具链文件与其他工具链文件合并,可以设置 CMake 缓存变量 VCPKG_CHAINLOAD_TOOLCHAIN_FILE

cmake ../my/project \
   -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake \
   -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=../my/project/toolchain.cmake

或者,可以在主工具链文件的末尾包含 vcpkg 工具链:

# MyToolchain.cmake
set(CMAKE_CXX_COMPILER ...)
set(VCPKG_TARGET_TRIPLET x64-my-custom-windows-triplet)
include(/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake)

vcpkg 在生成库时不会自动应用工具链的设置,例如编译器或编译标志。 若要更改 vcpkg 的库设置,必须创建一个可以共享工具链) 的自定义三元组文件 (**

所有影响 vcpkg 的变量都必须在第一 project()CMakePresets.json指令之前定义,例如在 的 "cacheVariables" 映射中,通过命令行或 set() 语句定义。

VCPKG_TARGET_TRIPLET

此设置控制 三重 vcpkg 将从中安装和使用库。

如果未设置,vcpkg 将在给定当前编译器设置的情况下自动检测适当的默认三元组。 如果更改此 CMake 变量,则必须删除缓存并重新配置。

VCPKG_HOST_TRIPLET

此变量控制将为其安装哪个 三元 主机依赖项。

如果未设置,vcpkg 将自动检测适当的本机三元 (x64-windows、x64-osx、x64-linux) 。

另请参阅 主机依赖项

VCPKG_INSTALLED_DIR

此变量设置从中安装和使用库的位置。

在清单模式下,默认值为 ${CMAKE_BINARY_DIR}/vcpkg_installed

在经典模式下,默认值为 ${VCPKG_ROOT}/installed

VCPKG_MANIFEST_MODE

此变量强制 vcpkg 在清单模式或经典模式下运行。

当 为非空或${CMAKE_SOURCE_DIR}/vcpkg.json存在时VCPKG_MANIFEST_DIRON默认为 。

若要在检测到 时 vcpkg.json 禁用清单模式,请将此项设置为 OFF

VCPKG_MANIFEST_DIR

此变量指定包含清单的 vcpkg.json 备用文件夹。

如果${CMAKE_SOURCE_DIR}/vcpkg.json存在,则默认为 ${CMAKE_SOURCE_DIR}

VCPKG_MANIFEST_INSTALL

此变量控制在配置步骤期间是否自动运行 vcpkg 以安装依赖项。

如果 VCPKG_MANIFEST_MODE 为 ,ON则默认为 ON

VCPKG_BOOTSTRAP_OPTIONS

可以将此变量设置为要传递给 ./bootstrap-vcpkg的其他命令参数。

在清单模式下,如果可执行文件不存在,vcpkg 将自动启动。

VCPKG_OVERLAY_TRIPLETS

此变量可以设置为在命令行上传递的路径列表 --overlay-triplets=...

VCPKG_OVERLAY_PORTS

此变量可以设置为在命令行上传递的路径列表 --overlay-ports=...

VCPKG_MANIFEST_FEATURES

可以将此变量设置为从清单安装时要激活的功能列表。

例如,项目可以使用功能来控制具有附加依赖项的生成,以启用测试或示例:

"name": "mylibrary", "version": "1.0", "dependencies": [ "curl" ], "features": { "samples": { "description": "Build Samples", "dependencies": [ "fltk" ] "tests": { "description": "Build Tests", "dependencies": [ "gtest" ]

可以使用 CMake 预设"cacheVariables"直接控制此设置,也可以基于其他设置间接控制此设置:

# CMakeLists.txt
option(BUILD_TESTING "Build tests" OFF)
if(BUILD_TESTING)
  list(APPEND VCPKG_MANIFEST_FEATURES "tests")
endif()
option(BUILD_SAMPLES "Build samples" OFF)
if(BUILD_SAMPLES)
  list(APPEND VCPKG_MANIFEST_FEATURES "samples")
endif()
project(myapp)
# ...

VCPKG_MANIFEST_NO_DEFAULT_FEATURES

除了 列出的 VCPKG_MANIFEST_FEATURES功能之外,此变量还控制默认功能的激活。 如果设置为 ON,则默认功能不会自动激活。

默认为 OFF

VCPKG_INSTALL_OPTIONS

可以将此变量设置为在自动安装期间传递给 vcpkg 工具的其他命令行参数列表。

VCPKG_PREFER_SYSTEM_LIBS

此功能已弃用。 请改用空覆盖端口。

此变量控制 vcpkg 是否将其路径追加而不是追加到 CMAKE_PREFIX_PATHCMAKE_LIBRARY_PATHCMAKE_FIND_ROOT_PATH 以便 vcpkg 库/包在工具链/系统库/包之后找到。

默认为 OFF

VCPKG_FEATURE_FLAGS

此变量可以设置为在自动安装期间传递给 vcpkg 工具的功能标志列表,以选择加入实验行为。

有关详细信息, --feature-flags= 请参阅命令行选项。

VCPKG_TRACE_FIND_PACKAGE

设置为 ON时,打印对 的每次调用 find_package。 嵌套调用 (例如通过 find_dependency) 根据嵌套深度缩进。