我正在为CMake项目以清单模式使用带有vcpkg集成的VS2022。我已经在CMakeLists.txt
中定义了一个版本,该版本被配置为头文件和资源文件:
cmake_minimum_required(VERSION 3.23)
project(clcto-lib VERSION 1.2.0.0)
# ...
要在清单模式下使用vcpkg,我还包括一个vcpkg.json
:
{
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg/master/scripts/vcpkg.schema.json",
"name": "clcto-lib",
"version": "1.2.0.0",
"dependencies": [
"log4cxx"
]
}
现在,我必须在两个位置指定应该保持同步的版本。我希望避免这种情况,以便只指定一次版本。
在清单模式下,为什么必须指定版本?它是如何使用的?我将如何在CMakeLists.txt
文件中或在配置时使用它?由于vcpkg清单是端口清单的一个良好开端,如果可能的话,我希望这是该版本的唯一真相来源。
经过进一步调查,清单文件似乎只使用"dependencies"
(没有"name"
和"version"
属性(。是否有理由将它们包括在项目清单中,而不仅仅是港口?
是否有理由将它们包含在项目清单中,而不仅仅是端口?
保持端口中的清单与项目清单同步。理论上,这个想法是,你可以简单地将清单从你的项目中放入一个端口,写一个小的端口文件并完成它。如果没有版本字段,你需要添加它。
如果您提交了一个vcpkg清单,您可以使用string(JSON)
并从清单中读取版本,并将其提供给project
命令