cmake/cpack 组件 debuginfo rpm 包没有出现

Posted

技术标签:

【中文标题】cmake/cpack 组件 debuginfo rpm 包没有出现【英文标题】:cmake/cpack component debuginfo rpm package doesn't appear 【发布时间】:2018-03-01 01:26:16 【问题描述】:

CentOS6.9 / cmake 3.6.1

在我的项目中,我尝试创建多个组件,而不是为它们构建运行时、开发和调试信息包,但我无法为每个组件生成多个 rpm。我创建了一个小项目来显示问题:

./include/Box.hpp

namespace room 

class Box 
public:
    Box(int volume);
    int get_volume() const;
private:
    int m_volume;
;


./source/Box.cpp

#include "Box.hpp"

namespace room 

Box::Box(int volume)
    : m_volume(volume)



int Box::get_volume() const

    return this->m_volume;



./source/app.cpp

#include "Box.hpp"

int main() 
    room::Box box(5);
    return box.get_volume();

./CMakeLists.txt

cmake_minimum_required(VERSION 3.6)

project (home)

set(CMAKE_INSTALL_PREFIX "/usr/local")
set(CMAKE_BUILD_TYPE "RelWithDebInfo")

include_directories("include")
file(GLOB SRC_FILES "source/*.cpp")
file(GLOB HDR_FILES "include/*.hpp")

add_executable($PROJECT_NAME $SRC_FILES)
install(FILES $HDR_FILES DESTINATION "include" COMPONENT devel)
install(TARGETS $PROJECT_NAME RUNTIME DESTINATION "bin" COMPONENT devel)

set(CPACK_COMPONENTS_ALL devel)

set(CPACK_RPM_PACKAGE_DEBUG 1)
set(CPACK_RPM_COMPONENT_INSTALL ON)
set(CPACK_GENERATOR "RPM")
set(CPACK_RPM_DEVEL_FILE_NAME "$PROJECT_NAME-devel.rpm")

set(CPACK_RPM_DEVEL_DEBUGINFO_PACKAGE ON)
set(CPACK_RPM_DEVEL_DEBUGINFO_FILE_NAME "$PROJECT_NAME-devel-debuginfo.rpm")
include(CPack)

控制台:

$ mkdir BUILD && cd BUILD && cmake3 .. && make -j5 && make package

但在此操作之后,我只看到一个“开发”rpm,而没有带有 debuginfo 的 rpm。我查看了文档,找不到任何想法我错了。有人可以向我澄清吗?感谢您的任何建议。

【问题讨论】:

在执行此操作之前您是否阅读过minimal reproducible example 或者您只是一个合乎逻辑的提问者?参加 5 次! 【参考方案1】:

总结

您的示例通常可以正常工作,您可能只需要更新您的 CMake 版本。

详情

我的 Ubuntu 14.04.5 LTS 和 CMake 3.10.2 无法重现您的问题。生成了一个./BUILD/home-devel-debuginfo.rpm

在您给出的示例中,我注意到了三件事:

    CPACK_RPM_DEBUGINFO_PACKAGE 是在CMake Version 3.7 中引入的。所以CMakeLists.txt 的第一行应该是:

    cmake_minimum_required(VERSION 3.7)
    

    有关在 Linux 上将 CMake 更新到最新版本的更多详细信息,请参阅"ccmake using cmake version 3.10"。

    如果您想查找支持某个功能的最低 CMake 版本 - 因为这不是 CMake 官方文档的一部分 - 请参阅"Finding which CMake version a feature was introduced in"。

    文档说变量CPACK_BUILD_SOURCE_DIRS 是强制性的。如果我添加以下行,我会摆脱很多 rpm 生成警告:

    set(CPACK_BUILD_SOURCE_DIRS "$CMAKE_SOURCE_DIR")
    

    debuginfo 打包到elfutils 包存在依赖关系。所以我不得不这样做:

    sudo apt-get install elfutils
    

【讨论】:

@hvd 是的,我只是没有可用的 CMake 版本 3.6.1 来真正测试它。我应该改写为“您的示例通常有效,您可能只需要更新您的 CMake 版本”。

以上是关于cmake/cpack 组件 debuginfo rpm 包没有出现的主要内容,如果未能解决你的问题,请参考以下文章

CMake + CPack:安装整个目录(包括子文件夹)

使用 CPack 打包时是不是需要 CMake 安装步骤?

InstallDirRegKey 的 CMake/CPack 命令

如何通过 CMake/CPack 在 NSIS 中设置向导图像?

仅在 CPack 中将文件添加到 ARCHIVE 包

CMake/CPack - 生成 Debian 包维护者脚本(特别是 postrm)