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

如何基于同一CMake/CPP源码通过debuild生成多个Debian软件包?

解决方案

要通过debuild生成package1.deb和package2.deb两个独立包,核心思路有两种,具体如下:

方案一:一次构建编译所有组件(推荐)

这是Debian多二进制包的标准做法,一次构建完成所有代码编译,再通过.install文件拆分到不同包中,效率更高。

  1. 修改debian/rules,同时开启两个CMake编译开关
%:
    dh $@ --buildsystem=cmake

override_dh_auto_configure:
    dh_auto_configure -- --no-warn-unused-cli -DPACKAGE_ONE=ON -DPACKAGE_TWO=ON
  1. 启用debian/control中的package2配置
    取消原文件中package2相关代码的注释,确保两个包的元数据都生效:
Source: blabla
Maintainer: ME <me@here.com>
Section: misc
Priority: optional
Build-Depends:
 debhelper-compat (= 12),
 cmake (>= 3.10.0),

Package: package1
Architecture: any
Pre-Depends: ${misc:Pre-Depends}
Depends:
 ${misc:Depends},
 ${shlibs:Depends},
 ${debconf:Depends},
 unzip
Description: Package 1
 The first package.

Package: package2
Architecture: any
Pre-Depends: ${misc:Pre-Depends}
Depends:
 ${misc:Depends},
 ${shlibs:Depends},
 ${debconf:Depends},
 unzip
Description: Package 2
 The second package.
  1. 完善.install文件
    确保package1.install和package2.install分别指定各自包需要打包的文件路径,示例如下:
  • package1.install:
usr/bin/package1-executable
usr/share/doc/package1/*
  • package2.install:
usr/bin/package2-executable
usr/share/doc/package2/*

执行debuild后,会自动生成两个独立的deb包。

方案二:针对不同包使用差异化CMake参数(按需使用)

如果两个包需要完全不同的编译配置(比如特定编译选项仅针对其中一个包),可以通过debian/rules的条件判断实现:

  1. 修改debian/rules添加分目标配置
%:
    dh $@ --buildsystem=cmake

# 仅编译package1的配置
override_dh_auto_configure::package1
    dh_auto_configure -- --no-warn-unused-cli -DPACKAGE_ONE=ON -DPACKAGE_TWO=OFF -DPACKAGE1_CUSTOM_OPTION=ON

# 仅编译package2的配置
override_dh_auto_configure::package2
    dh_auto_configure -- --no-warn-unused-cli -DPACKAGE_ONE=OFF -DPACKAGE_TWO=ON -DPACKAGE2_CUSTOM_OPTION=ON

# 默认全量编译配置(可选)
override_dh_auto_configure::
    dh_auto_configure -- --no-warn-unused-cli -DPACKAGE_ONE=ON -DPACKAGE_TWO=ON
  1. 添加构建清理逻辑
    为避免多次构建的文件冲突,在debian/rules中添加清理规则:
override_dh_auto_clean:
    dh_auto_clean
    rm -rf build/
  1. 单独构建指定包
    执行debuild时可以指定仅构建某个包,比如:
debuild -b -ppackage1

关键注意事项

  • 确保CMakeLists.txt能兼容PACKAGE_ONE和PACKAGE_TWO同时为ON的情况,避免编译冲突。
  • CMake中需通过install(TARGETS ... DESTINATION ...)明确指定文件安装路径,确保与.install文件的路径匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:50:17