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.我查看了文档,无法找到我错在哪里.有人可以向我澄清一下吗?谢谢你的任何建议.
概括
您的示例通常可以正常工作,您可能只需要更新您的 CMake 版本。
细节
我无法使用我的 Ubuntu 14.04.5 LTS 和 CMake 3.10.2 重现您的问题。有./BUILD/home-devel-debuginfo.rpm生成的.
所以我从你给出的例子中注意到三件事:
它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 版本”。
文档说该变量CPACK_BUILD_SOURCE_DIRS是强制性的。如果我添加以下行,我就会摆脱很多rpm生成警告:
set(CPACK_BUILD_SOURCE_DIRS "${CMAKE_SOURCE_DIR}")
Run Code Online (Sandbox Code Playgroud)debuginfo包装对包装有依赖性elfutils。所以我必须这样做:
sudo apt-get install elfutils
Run Code Online (Sandbox Code Playgroud)