【问题标题】:How to create debian package with CPack command (not from CMake's files)?如何使用 CPack 命令(不是来自 CMake 的文件)创建 debian 包?
【发布时间】:2020-09-19 15:23:39
【问题描述】:

我已经构建并安装了 CMake 项目。 现在我想从中生成 debian 包 (*.deb)。网上有很多说明如何通过在 CMake 的文件中添加一些东西来创建 debian 包,但是我构建的项目不属于我,所以我不应该修改它的源。 我找到了命令cpack,它也可以生成deb包。不幸的是,当我尝试使用命令时:

cpack -G DEB -C cmake/build/directory -P myPackage.deb -R 1.0.

我明白了:

CPack Error: Please specify build tree of the project that uses CMake using CPACK_INSTALL_CMAKE_PROJECTS, specify CPACK_INSTALL_COMMANDS, CPACK_INSTALL_SCRIPT, or CPACK_INSTALLED_DIRECTORIES.

很遗憾,帮助中的命令中无法指定选项:

cpack --help

那么是否可以使用命令cpack 生成debian 包而不对CMake 文件进行任何更改?

【问题讨论】:

  • "那么是否可以使用命令 cpack 生成 debian 包而不对 CMake 文件进行任何更改?" - 可能,是的,你可以在没有 CMake 项目的情况下使用 CPack。但是您是对的,官方文档中根本没有描述 CPack 命令。其他 CMake 衍生产品(如 CTest)也是如此。
  • "但是我建的项目不属于我,所以我不应该修改它的源。" - 不确定法律问题,但有一些方法可以修改项目的文件,并且仍然能够将它们与项目的 repo 同步。例如。当你想打包项目时,你可以创建一个补丁并应用它。如果你想创建驱动外部项目打包的 CMake 项目,你可以使用ExternalProject_Add 命令来达到这个目的。它的选项PATCH_COMMAND 可用于应用补丁。

标签: linux cmake deb cpack


【解决方案1】:

CMakeLists.txt 包含CPack 模块时,它会在顶层构建目录中生成CPackConfig.cmake。此配置文件是 CPack 的默认配置文件,但您可以使用 --config 选项覆盖它。

该文件由一组set() 命令组成,用于设置各种CPACK_* variables。要生成一个包(您问题中的 DEB),您应该“手动”编写配置文件并为 CPack 设置重要变量,以及为DEB 生成器(即CPACK_DEBIAN_*)设置一些变量。

一般来说,这个配置(其中的变量)描述了哪些项目和它的组件要包含到包中,定义一些元数据等等......理论上,你可以传递所有定义通过-D 选项到cpack(1)。在实践中,恕我直言,编写CPackConfig.cmake %) 会更容易

有了那个配置文件,这个命令应该是你想要的:

$ cpack -G DEB

(或者如果您的配置仅描述要构建的 Debian 软件包,则单独使用 cpack)。

【讨论】:

    猜你喜欢
    • 2012-04-22
    • 2023-03-12
    • 1970-01-01
    • 2014-11-29
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多