创建多个 debian 软件包

问题描述 投票:0回答:1

我正在尝试从使用 CMake 构建的 CPP 源创建 debian 包。

我正在使用debuild,我不是使用cpack

到目前为止我已达到以下阶段:

debian/rules 如下所示:

%:
    dh $@ --buildsystem=cmake

override_dh_auto_configure:
    dh_auto_configure -- --no-warn-unused-cli -DPACKAGE_ONE=ON -DPACKAGE_TWO=OFF

debian/control 看起来像:

Source: blabla
Maintainer: ME <[email protected]>
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.

非常简化的 CMakeLists.txt 看起来像:

project(blabla)

add_subdirectory(common_dependencies)

if(PACKAGE_ONE)
  add_subdirectory(package1)
endif()

if(PACKAGE_TWO)
  add_subdirectory(package2)
endif()

add_subdirectory(other_dependencies)
各个

package1/2 子目录中的

CMakeLists.txt
负责创建可执行文件等...

问题是,对于结果我需要在调用debuild时生成两个不同的debian包(package1.deb,package2.deb)...

但我根本无法猜测如何使用上述要求从同一源构建两个不同的 debian 软件包,即:当只有一个 debian/rules 文件时,传入 CMake 标志(为我通过创建 package1.installpackage2.install 以及他们需要的所有文件、图像、图标等来整理出不同的软件包)

这可能吗? 谢谢!

cmake build package debian deb
1个回答
1
投票

当然可以(并且相当常见)从单个源包构建多个二进制包。

  • debian/control
    必须列出正在创建的every二进制包。
  • 只有一个
    debian/rules
    文件,因为该文件包含构建 所有内容
  • 的配方
  • 通常您会将各种构建工件分类到两个二进制包中

所以通常你会有一个像这样的

debian/control
(请注意,package2已被取消注释):

Source: blabla
Maintainer: ME <[email protected]>
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.

你的

debian/rules
可能看起来像这样(注意两个包都已构建):

%:
    dh $@ --buildsystem=cmake

override_dh_auto_configure:
    dh_auto_configure -- --no-warn-unused-cli -DPACKAGE_ONE=ON -DPACKAGE_TWO=ON

剩下的唯一一件事就是将构建工件分类到两个包中。

假设使用

-DPACKAGE_ONE=1
进行构建会产生一个工件
/usr/bin/package1
,并且
-DPACKAGE_ONE=2
在运行
/usr/bin/package2
时会产生一个工件
make install

然后您需要创建/编辑更多文件,

debian/package1.install
debian/package2.install
- 非常具有声明性 - 只需列出每个包中的文件即可。

所以

debian/package1.install
将包含:

/usr/bin/package1

debian/package2.install
将包含:

/usr/bin/package2

在底层,

dh
调用
dh_auto_install
,指示cmake将所有文件安装到
DESTDIR=$(pwd)/debian/tmp/
中。 在组装最终包之前,
dh_install
将在此处查找各种
debian/*.install
文件中列出的文件并将它们分类到
$(pwd)/debian/<pkgname>/
中。 有很多方法可以调整这一切,但标准行为很可能会满足您的需求。

© www.soinside.com 2019 - 2024. All rights reserved.