Vcpkg manifest 简单介绍

什么是清单模式?

  1. 在工程根目录的CMakeLists.txt文件中添加如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
if(CMAKE_HOST_WIN32)
set(CMAKE_TOOLCHAIN_FILE
"C:/vcpkg/scripts/buildsystems/vcpkg.cmake"
CACHE STRING "Vcpkg toolchain file")
elseif(CMAKE_HOST_APPLE)
set(CMAKE_TOOLCHAIN_FILE
"/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake"
CACHE STRING "Vcpkg toolchain file")
elseif(CMAKE_HOST_UNIX)
set(CMAKE_TOOLCHAIN_FILE
"/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake"
CACHE STRING "Vcpkg toolchain file")
endif()
  1. 在工程根目录的添加 vcpkg.json 文件,可以参考vcpkg.json,以OpenSSL为例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"name": "build",
"version": "0.0.1",
"description": "build packages",
"dependencies": [
"openssl"
],
"overrides": [
{
"name": "openssl",
"version-string": "1.1.1h#5"
}
],
"builtin-baseline": "9c2fc5d3518bb7f729754b23440695f9c595576a"
}

使用 features 字段可以添加依赖库的依赖库或者是模块。

版本控制

  1. 基线:
    若要添加初始 “builtin-baseline”,请使用 vcpkg x-update-baseline –add-initial-baseline。 若要更新清单中的基线,请使用 vcpkg x-update-baseline
  2. overrides:
    声明替代会强制 vcpkg 忽略所有其他版本约束,并使用替代中指定的版本。 这对于固定确切版本和解决版本冲突非常有用。

在工程根目录的CMakeLists.txt文件中使用清单模式中的库

跟正常加载库一样,在CMakeLists.txt文件中使用 find_package函数:

1
2
3
4
5
6
find_package(OpenSSL REQUIRED)
if(OpenSSL_FOUND)
message(STATUS "found OpenSSL")
endif()

target_link_libraries(main PRIVATE OpenSSL::SSL OpenSSL::Crypto)

Example