如何使用cmake构建“文件副本” RPM?

斯蒂芬·贾里兹(Stefan Jaritz)

我想构建一个演示rpm程序包,该程序包将一个文件复制到目标系统并执行一些前置和后置脚本。我设法创建了一个包装。当我在目标系统上运行软件包时,收到e警告:“警告:xxx软件包打算用于yyy平台”。但是没有文件被复制。有任何想法吗?之后我的代码/项目:

项目树:

myRpm/CMakeLists.txt
myRpm/install.txt
myRpm/post.py
myRpm/post.sh
myRpm/pre.py
myRpm/pre.sh

CMakeLists:

cmake_minimum_required (VERSION 2.8)
if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
    INCLUDE(InstallRequiredSystemLibraries)
    set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE 1)
    set(CPACK_PACKAGE_NAME "my test")
    set(CPACK_PACKAGE_VENDOR "tets")
    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "fake rpm")
    set(CPACK_PACKAGE_VERSION "6.6.6")
    set(CPACK_PACKAGE_VERSION_MAJOR "6")
    set(CPACK_PACKAGE_VERSION_MINOR "6")
    set(CPACK_PACKAGE_VERSION_PATCH "6")
    set(targetDestDir "myDir")
    set(CPACK_GENERATOR "RPM")
    install(
        FILES "${CMAKE_CURRENT_SOURCE_DIR}/install.txt" "${CMAKE_CURRENT_SOURCE_DIR}/pre.py" "${CMAKE_CURRENT_SOURCE_DIR}/post.py"
        DESTINATION "${targetDestDir}"
    )
    set(CPACK_RPM_PRE_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/pre.sh")
    set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/post.sh")
    include(CPack)
endif()
斯蒂芬·贾里兹(Stefan Jaritz)

在为其他系统/发行版构建RPM时,CPACK_RPM_PACKAGE_ARCHITECTURE的值很重要。下面的代码应该工作:

cmake_minimum_required (VERSION 2.8)
if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
    INCLUDE(InstallRequiredSystemLibraries)
    set(CMAKE_INSTALL_TMPDIR /tmp CACHE PATH "Output dir for tmp")
    set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE 1)
    set(CPACK_PACKAGE_NAME "mytest")
    set(CPACK_PACKAGE_VENDOR "tets")
    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "fake rpm")
    set(CPACK_PACKAGE_VERSION "6.6.6")
    set(CPACK_PACKAGE_VERSION_MAJOR "6")
    set(CPACK_PACKAGE_VERSION_MINOR "6")
    set(CPACK_PACKAGE_VERSION_PATCH "6")
    set(CPACK_GENERATOR "RPM")
    set(CPACK_RPM_PACKAGE_ARCHITECTURE "noarch")
    set(targetDestDir ${CMAKE_INSTALL_TMPDIR})
    install(
        FILES "${CMAKE_CURRENT_SOURCE_DIR}/install.txt" "${CMAKE_CURRENT_SOURCE_DIR}/post.py"
        DESTINATION "${targetDestDir}"
    )
    set(CPACK_RPM_PRE_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/pre.sh")
    set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/post.sh")
    include(CPack)
endif()

注意:pre.sh和post.sh在源的根目录中。在post.sh中,将调用post.py。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章