使用 cmake 创建多个 Debian 软件包

Posted

技术标签:

【中文标题】使用 cmake 创建多个 Debian 软件包【英文标题】:Creating Multiple Debian Packages with cmake 【发布时间】:2018-11-23 15:21:28 【问题描述】:

我有一个由一组可执行文件组成的 cmake 项目,它们相互独立,有两个共享库。我想将每个可执行文件打包到一个 deb 包中。 结果,我得到了一个包含所有程序和库的 deb 包。

部分源码:

cmake_minimum_required (VERSION 3.12)

set (CPACK_GENERATOR "DEB")
set (CPACK_DEBIAN_PACKAGE_MAINTAINER "i am")
set (CPACK_DEB_COMPONENT_INSTALL 1)
include (CPack)

add_executable (module1 main.cpp)
install (TARGETS module1 
        RUNTIME DESTINATION bin 
        COMPONENT component1)

add_library (my_lib SHARED map.cpp templates.cpp)
add_executable (my_lib main.cpp utils.cpp)
target_link_libraries (module2 PUBLIC my_lib)

install(TARGETS module2 my_lib
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib
        COMPONENT component2)

如何将程序分成不同的deb包?

【问题讨论】:

【参考方案1】:

这就是答案

set (CPACK_GENERATOR "DEB")
set (CPACK_DEBIAN_PACKAGE_MAINTAINER "Your name")
set (CPACK_DEB_COMPONENT_INSTALL ON)
include (CPack)

function (add_package TARGET_NAME TARGET_PATH DESCR)
    install(TARGETS "$TARGET_NAME"
            DESTINATION "$TARGET_PATH"
            COMPONENT "$TARGET_NAME")

    cpack_add_component_group("$TARGET_NAME")

    cpack_add_component("$TARGET_NAME"
                        DISPLAY_NAME "$TARGET_NAME"
                        DESCRIPTION "$DESCR"
                        GROUP "$TARGET_NAME"
                        INSTALL_TYPES Full)
endfunction ()

add_executable (my_program1 main.cpp)
add_package(my_program1 "bin" "Description")

add_executable (my_program2 main.cpp)
add_package(my_program2 "bin" "Description")

在终端运行

make package

【讨论】:

以上是关于使用 cmake 创建多个 Debian 软件包的主要内容,如果未能解决你的问题,请参考以下文章

在一个 Debian 软件包中支持多个 Boost 版本

为什么要使用CMake?

Debian 软件包:用户和组

给一个文件创建一个软链接bb,应该敲啥

cmake创建库和使用库工程示例(多个cmakelists)

[原创]在Debian9上配置软件阵列