You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake中find_package指定主/次/补丁/微调版本的正确方式问询

问题分析与解决

首先,你犯了一个常见的语法误解:CMake文档里的major[.minor[.patch[.tweak]]]是语法说明格式,方括号[]表示该部分是可选的,实际写代码时要去掉括号,直接填写具体的版本数值。你写的1[.0[.0[.75670974]]]是无效的参数格式,这就是报错的直接原因。

1. 符合CMake规范的版本号写法

如果你的tweak部分是数值类型(比如你示例中的75670974),正确的find_package写法应该是:

find_package(Package 1.0.0.75670974 EXACT REQUIRED)

这样CMake会自动解析出:

  • Package_VERSION_MAJOR=1
  • Package_VERSION_MINOR=0
  • Package_VERSION_PATCH=0
  • Package_VERSION_TWEAK=75670974

2. 关于字符串类型的Tweak值问题

CMake官方明确要求版本的每个组件(major/minor/patch/tweak)必须是数值,所以你无法将integer-id这种字符串类型的值赋值给Package_VERSION_TWEAK。如果你的包路径中的integer-id是字符串而非数值,有两种替代方案:

  • 方案一:自定义变量存储
    在成功找到包后,手动提取并设置自定义变量来存储这个字符串标识,比如:
    find_package(Package 1.0.0 EXACT REQUIRED)
    # 假设你能通过包的路径或其他方式获取到integer-id的值
    set(Package_VERSION_TWEAK_STRING "integer-id")
    
  • 方案二:调整包的版本定义
    修改包的PackageConfigVersion.cmake文件,将integer-id作为额外的版本元数据而非CMake标准的tweak组件,或者将其转换为数值类型(如果业务允许)。

内容的提问来源于stack exchange,提问作者Nishikant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:12:16