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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了没有出现cmake / cpack组件的debuginfo rpm包相关的知识,希望对你有一定的参考价值。

CentOS6.9 / cmake 3.6.1

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

./include/box.红扑扑

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

./C make lists.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

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

答案

摘要

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

细节

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

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

  1. CPACK_RPM_DEBUGINFO_PACKAGE是在CMake Version 3.7引入的。所以你的CMakeLists.txt的第一行应该是: cmake_minimum_required(VERSION 3.7) 有关将CMake更新到Linux上的最新版本的更多详细信息,请参阅"ccmake using cmake version 3.10"。 如果你想找到哪个CMake版本是支持某个功能的最小版本 - 因为这不是CMake官方文档的一部分 - 请参阅"Finding which CMake version a feature was introduced in"
  2. 文档说变量CPACK_BUILD_SOURCE_DIRS是强制性的。如果我添加以下行,我摆脱了很多rpm生成警告: set(CPACK_BUILD_SOURCE_DIRS "${CMAKE_SOURCE_DIR}")
  3. 包装debuginfoelfutils包装有依赖关系。所以我必须这样做: sudo apt-get install elfutils

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

使用 CMake 和 CPack 为一个组件创建包

从 cpack 组件中删除后缀

cpack 组件级安装

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

CPack NSIS 组件未指定

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