У меня есть проект с несколькими компонентами. Некоторые из этих компонентов зависят друг от друга. CPack автоматически устанавливает связанные библиотеки в соответствии с требованиями RPM, но не указывает версию. Есть ли способ заставить CPack установить версию пакета требуемых пакетов в качестве версии (и выпуска) пакета, который он в данный момент собирает.
Моя база CMakeLists.txt выглядит как
cmake_minimum_required(VERSION 3.0)
set(CPACK_PACKAGE_NAME "test")
set(CPACK_PACKAGE_VERSION 1.0)
set(CPACK_RPM_PACKAGE_RELEASE 1)
set(CPACK_GENERATOR "RPM")
set(CPACK_COMPONENT_INSTALL ON)
set(CPACK_RPM_COMPONENT_INSTALL ON)
add_subdirectory(project1)
add_subdirectory(project2)
project1 CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(project1 VERSION 1.0.0 LANGUAGES CXX)
add_library(project1 SHARED src/test.cpp src/test.h)
install(TARGETS project1 COMPONENT project1)
export(PACKAGE project1)
cpack_add_component(project1)
project2 CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(project2 VERSION 1.0.0 LANGUAGES CXX)
add_library(project2 SHARED src/test2.cpp src/test2.h)
target_link_libraries(project2 PUBLIC project1)
install(TARGETS project2 COMPONENT project2)
export(PACKAGE project2)
cpack_add_component(project2)
Когда я запускаю rpm -qpR на test-project2.rpm, я получаю
project1.so()(64bit)
Когда я хочу
project1.so()(64bit) >= 1.0.1
Я попытался добавить следующее в CMakeLists.txt проекта2, но это не сработало
set(CPACK_RPM_project2_REQUIRES "project1 >= $CPACK_PACKAGE_VERSION.$CPACK_RPM_PACKAGE_RELEASE")
Добавление этого в базу CMakeList.txt сработало
set(CPACK_RPM_project2_REQUIRES "test_project1 >= $CPACK_PACKAGE_VERSION-$CPACK_RPM_PACKAGE_RELEASE")
Но я бы предпочел оставить все особенности project2 для project2 CMakeLists.txt