我在尝试使用RPM生成器时为CPACK_PACKAGING_INSTALL_PREFIX
设置每个组件的值,但我没有取得任何成功。
CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX
的{{3}}表示“可用于为可重新定位的RPM软件包设置每个组件CPACK_PACKAGING_INSTALL_PREFIX”。但是,情况似乎并非如此。
这是一个简单的CMakeLists,演示了这个问题:
cmake_minimum_required(VERSION 3.8)
project(FooBar
VERSION 0.1.0
)
add_executable(foo foo.cpp)
add_executable(bar bar.cpp)
include(GNUInstallDirs)
install(TARGETS foo
DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT Foo_Comp
)
install(TARGETS bar
DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT Bar_Comp
)
set(CPACK_PACKAGE_VERSION_MAJOR ${FooBar_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${FooBar_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${FooBar_VERSION_PATCH})
set(CPACK_PACKAGE_RELOCATABLE ON)
set(CPACK_PACKAGING_INSTALL_PREFIX "/tmp/foobar")
set(CPACK_RPM_COMPONENT_INSTALL ON)
#set(CPACK_RPM_FOO_COMP_PACKAGE_PREFIX "/tmp/foo")
#set(CPACK_RPM_BAR_COMP_PACKAGE_PREFIX "/tmp/bar")
set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/tmp")
include(CPack)
原样,该示例工作正常:当构建目标install
时,可执行文件安装到${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}
,当生成RPM并用于安装文件时,它们会运行到${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}
。
问题是当注释掉的行被取消注释时。它们仍然使用CPACK_PACKAGING_INSTALL_PREFIX
安装,而不是将每个组件安装到其各自的打包前缀,但现在它们不再可重定位(即--prefix
和--relocate
不再受{rpm
支持1}}命令)。
如果安装命令更改为:
install(TARGETS foo
DESTINATION "/tmp/foo/${CMAKE_INSTALL_BINDIR}"
COMPONENT Foo_Comp
)
install(TARGETS bar
DESTINATION "/tmp/bar/${CMAKE_INSTALL_BINDIR}"
COMPONENT Bar_Comp
)
然后包可重定位,RPM按预期安装它们,但CMAKE_INSTALL_PREFIX
不再正常工作。
查看CPackRPM模块的代码,看起来似乎没有可以设置的变量来实现我想要的结果,但希望我遗漏了一些东西。