背景
在实际项目中,您的项目代码需要依赖第三方库的历史版本,以往的做法是将vcpkg回退到需要使用的版本,或者是自定义版本,这会导致其他的库也回退到以前的版本。 现在vcpkg提供了versioning 特性,可以方便地解决这个问题。Versioning 特性是默认开启的,不需要额外的设置来启用。注意:此特性依赖于manifest模式,使用这个特性前请先了解manifest特性。
使用示例
1. 创建一个简单的cmake工程, 然后让它依赖于 fmt 和 zlib, 假设需要依赖fmt版本大于等于 7.1.3。 创建文件夹 versioning 并包含以下3个文件 vcpkg.json,main.cpp, CMakeLists.txt:
vcpkg.json:
{
"name": "versions-test",
"version": "1.0.0",
"dependencies": [
{
"name": "fmt",
"version>=": "7.1.3"
},
"zlib"
],
"builtin-baseline": "99dc49dae7e170c3be63dd097230007f3bb73c4f"
}
main.cpp:
#include <fmt/core.h>
#include <zlib.h>
int main()
{
fmt::print("fmt version is {}\n"
"zlib version is {}\n",
FMT_VERSION, ZLIB_VERSION);
return 0;
}
CMakeLists.txt:
cmake_minimum_required(VERSION 3.18)
project(versionstest CXX)
add_executable(main main.cpp)
find_package(ZLIB REQUIRED)
find_package(fmt CONFIG REQUIRED)
target_link_libraries(main PRIVATE ZLIB::ZLIB fmt::fmt)
现在可以构建和运行cmake工程:
1. 创建cmake工程构建目录:
E:\vcpkg\vcpkgtest\versioning>mkdir build E:\vcpkg\vcpkgtest\versioning>cd build
2. 配置CMake工程:
cmake -G "Visual Studio 16 2019" -DVCPKG_TARGET_TRIPLET=x64-windows "-DCMAKE_TOOLCHAIN_FILE=E:/vcpkg/vcpkg_debug/vcpkg/scripts/buildsystems/vcpkg.cmake" ..
输出:
E:\vcpkg\vcpkgtest\versioning\build>cmake -G "Visual Studio 16 2019" "-DCMAKE_TOOLCHAIN_FILE=E:/vcpkg/vcpkg_debug/vcpkg/scripts/buildsystems/vcpkg.cmake" ..
-- Running vcpkg install
Detecting compiler hash for triplet x64-windows...
A suitable version of powershell-core was not found (required v7.1.3). Downloading portable powershell-core v7.1.3...
Extracting powershell-core...
The following packages will be built and installed:
fmt[core]:x64-windows -> 7.1.3 -- E:\vcpkg\vcpkg_debug\vcpkg\buildtrees\versioning\versions\fmt\dd8cf5e1a2dce2680189a0744102d4b0f1cfb8b6
zlib[core]:x64-windows -> 1.2.11#9 -- E:\vcpkg\vcpkg_debug\vcpkg\buildtrees\versioning\versions\zlib\827111046e37c98153d9d82bb6fa4183b6d728e4
Using cached binary package: C:\Users\phoebe\AppData\Local\vcpkg\archives\c1\c1284fcdc26b903209c6