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

J. *_*Ode 9 c++ rpm cmake cpack

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;
};

}
Run Code Online (Sandbox Code Playgroud)

./source/Box.cpp

#include "Box.hpp"

namespace room {

Box::Box(int volume)
    : m_volume(volume)
{
}

int Box::get_volume() const
{
    return this->m_volume;
}

}
Run Code Online (Sandbox Code Playgroud)

./source/app.cpp

#include "Box.hpp"

int main() {
    room::Box box(5);
    return box.get_volume();
}
Run Code Online (Sandbox Code Playgroud)

./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)
Run Code Online (Sandbox Code Playgroud)

安慰:

$ mkdir BUILD && cd BUILD && cmake3 .. && make -j5 && make package
Run Code Online (Sandbox Code Playgroud)

但是在这个动作之后,我看到只有一个'devel'rpm而没有带有debuginfo的rpm.我查看了文档,无法找到我错在哪里.有人可以向我澄清一下吗?谢谢你的任何建议.

Flo*_*ian 2

概括

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

细节

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

所以我从你给出的例子中注意到三件事:

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

    cmake_minimum_required(VERSION 3.7)
    
    Run Code Online (Sandbox Code Playgroud)

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

    如果您想查找哪个 CMake 版本是支持某个功能的最低版本(因为这不是 CMake 官方文档的一部分),请参阅“查找引入了某个功能的 CMake 版本”

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

    set(CPACK_BUILD_SOURCE_DIRS "${CMAKE_SOURCE_DIR}")
    
    Run Code Online (Sandbox Code Playgroud)
  3. debuginfo包装对包装有依赖性elfutils。所以我必须这样做:

    sudo apt-get install elfutils
    
    Run Code Online (Sandbox Code Playgroud)