我正在尝试从使用 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.install、package2.install 以及他们需要的所有文件、图像、图标等来整理出不同的软件包)
这可能吗? 谢谢!
当然可以(并且相当常见)从单个源包构建多个二进制包。
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>/
中。
有很多方法可以调整这一切,但标准行为很可能会满足您的需求。