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

CMake-CPack打包子项目版本不一致问题求助

解决CMake子项目版本传递到顶层CPACK的问题

步骤1:子项目向外暴露版本变量

在primary_display、secondary_display这类有独立版本的子项目CMakeLists.txt中,定义版本后把变量传递到父作用域:

# primary_display/CMakeLists.txt
project(primary_display VERSION 1.0.0)
# 将子项目版本传递给顶层项目
set(PRIMARY_DISPLAY_VERSION ${PROJECT_VERSION} PARENT_SCOPE)
# secondary_display/CMakeLists.txt
project(secondary_display VERSION 1.0.0)
set(SECONDARY_DISPLAY_VERSION ${PROJECT_VERSION} PARENT_SCOPE)

步骤2:顶层CPACK绑定组件与子项目版本

在顶层CMakeLists.txt的CPACK配置段,为每个组件单独指定对应版本:

# 顶层CMakeLists.txt的CPACK配置区
set(CPACK_COMPONENTS_ALL desktop primary_display secondary_display)
set(CPACK_GENERATOR "DEB")
set(CPACK_DEB_COMPONENT_INSTALL ON)

# 根项目版本作为默认,按需赋值给对应组件
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})

# 为每个子项目组件绑定专属版本
set(CPACK_DEBIAN_PRIMARY_DISPLAY_PACKAGE_VERSION ${PRIMARY_DISPLAY_VERSION})
set(CPACK_DEBIAN_SECONDARY_DISPLAY_PACKAGE_VERSION ${SECONDARY_DISPLAY_VERSION})
# desktop组件如果用根项目版本,可省略单独设置,或手动指定
# set(CPACK_DEBIAN_DESKTOP_PACKAGE_VERSION ${PROJECT_VERSION})

注意事项

  • 必须先通过add_subdirectory引入子项目,再配置CPACK的组件版本变量,确保顶层能拿到子项目传递的版本值。
  • 执行cmake .. && make package后,检查生成的Deb包文件名,比如primary_display_1.0.0_amd64.deb,确认版本是否正确对应。

内容的提问来源于stack exchange,提问作者a.wise

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:18:14