CentOS6.9 / cmake 3.6.1
В моем проекте я пытаюсь создать несколько компонентов, а не создавать пакеты runtime, devel и debuginfo для них, но я не смог произвести более одного об / мин для каждого компонента. Я создал небольшой проект, чтобы показать проблему:
./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
Но после этих действий я вижу только один » » » » » » » » » devel »], а в «debuginfo» — нет. Я посмотрел на документацию и не смог понять, где я ошибаюсь. Может ли кто-нибудь объяснить мне это? Спасибо за любые предложения.
Резюме
Ваш пример в целом работает, возможно, вам просто нужно обновить версию CMake.
Детали
Я не смог воспроизвести вашу проблему с моими Ubuntu 14.04.5 LTS и CMake 3.10.2. Eсть ./BUILD/home-devel-debuginfo.rpm
генерироваться.
Итак, три вещи, которые я заметил на вашем примере:
CPACK_RPM_DEBUGINFO_PACKAGE
был введен в CMake версия 3.7. Итак, первая строка вашего CMakeLists.txt
должно быть:
cmake_minimum_required(VERSION 3.7)
Подробнее об обновлении вашего CMake до последней версии в Linux смотрите msgstr «ccmake using cmake version 3.10».
Если вы хотите узнать, какая версия CMake является минимальной для поддержки определенной функции (поскольку это не является частью официальной документации CMake), см. «Поиск версии CMake, в которой была представлена функция».
В документации написано, что переменная CPACK_BUILD_SOURCE_DIRS
является обязательным. И если я добавлю следующую строку, я избавлюсь от многих rpm
предупреждения поколения:
set(CPACK_BUILD_SOURCE_DIRS "${CMAKE_SOURCE_DIR}")
Была зависимость упаковки debuginfo
к elfutils
пакет. Итак, я должен был сделать:
sudo apt-get install elfutils
Других решений пока нет …