如何通过find_package设置MAJOR.MINOR.PATCH/TWEAK格式的版本变量?
使用CMake指定多分量版本并获取版本变量
CMake官方文档版本选择部分(中文翻译)
当用find_package指定版本时,CMake支持完整的MAJOR.MINOR.PATCH.TWEAK语义化版本格式。版本字符串可以包含这四个分量,CMake会按规则匹配对应包版本:
- 加
EXACT选项时,会严格匹配指定的完整版本,包括所有分量; - 不加
EXACT时,会匹配不低于指定版本的兼容版本(兼容规则由包的配置文件定义)。
成功找到符合要求的包后,CMake会自动生成一系列版本相关变量,对应版本的各个分量。
具体实现方法
1. 修改find_package的版本指定
直接把版本写成MAJOR.MINOR.PATCH.TWEAK格式,结合需求加EXACT:
# 严格匹配2.3.4.1版本 find_package(pack 2.3.4.1 REQUIRED EXACT) # 或者匹配不低于2.3.4.1的兼容版本 # find_package(pack 2.3.4.1 REQUIRED)
2. 直接使用自动生成的版本变量
find_package成功后,CMake会自动创建以下变量,直接在后续代码中使用即可:
pack_VERSION:完整版本字符串(比如2.3.4.1)pack_VERSION_MAJOR:主版本号(比如2)pack_VERSION_MINOR:次版本号(比如3)pack_VERSION_PATCH:补丁版本号(比如4)pack_VERSION_TWEAK:微调版本号(比如1)
可以加个输出验证变量是否正确生成:
message(STATUS "当前找到的pack版本:${pack_VERSION}") message(STATUS "主版本:${pack_VERSION_MAJOR}") message(STATUS "次版本:${pack_VERSION_MINOR}") message(STATUS "补丁版本:${pack_VERSION_PATCH}") message(STATUS "微调版本:${pack_VERSION_TWEAK}")
3. 注意事项
- 要确保你的
pack包提供了正确的版本配置文件(一般是packConfigVersion.cmake),否则CMake无法正确识别和拆分版本分量; - 如果包的版本格式没有TWEAK分量,
pack_VERSION_TWEAK变量会被设置为空值。
内容的提问来源于stack exchange,提问作者Nishikant
相关产品推荐
相关产品推荐

