带有RPM Generator的CPACK_PACKAGING_INSTALL_PREFIX的每个组件值

时间:2017-12-15 17:40:01

标签: cmake rpm rpmbuild

我在尝试使用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模块的代码,看起来似乎没有可以设置的变量来实现我想要的结果,但希望我遗漏了一些东西。

0 个答案:

没有答案