【问题标题】:CPack / CMake: Different installation prefixes per CPACK_GENERATORCPack / CMake:每个 CPACK_GENERATOR 的不同安装前缀
【发布时间】:2015-06-19 11:44:12
【问题描述】:

如何为不同的 CPACK_GENERATOR 指定不同的安装前缀?

例如:

  • DEB包应该安装到/opt/project
  • TGZ 存档应仅包含 project 目录

documentation 我了解到我必须使用CPACK_PROJECT_CONFIG_FILE 变量。使用它,应该可以实现预期的目标。但是,它对我不起作用。

这是我的 CPack 配置:

set(CPACK_GENERATOR "DEB;TGZ")
set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_SOURCE_DIR}/cmake/package.linux.txt)

这是我的${CMAKE_SOURCE_DIR}/cmake/package.linux.txt 文件:

IF (CPACK_GENERATOR MATCHES "DEB")
    set(CPACK_NATIVE_INSTALL_DIRECTORY "/opt")
    set(CMAKE_INSTALL_PREFIX "/opt")
    set(CPACK_PACKAGING_INSTALL_PREFIX "/opt")
    set(CPACK_INSTALL_DIRECTORY "/opt")
ELSEIF(CPACK_GENERATOR MATCHES "TGZ")
    set(CPACK_NATIVE_INSTALL_DIRECTORY "")
    set(CMAKE_INSTALL_PREFIX "")
    set(CPACK_PACKAGING_INSTALL_PREFIX "")
    set(CPACK_INSTALL_DIRECTORY "")
ENDIF()

我已确保使用MESSAGE() 指令解析所有文件,但我的包的前缀始终是/usr/local

【问题讨论】:

    标签: cmake cpack


    【解决方案1】:

    最后,我发现了问题所在。我有 CPACK_SET_DESTDIR flag 设置。这使得 CPACK 将 usr/local 附加到包含编译的二进制文件的目录。删除相应的 SET() 指令后,一切都像魅力一样。

    为了记录,我将为您提供我的最小工作示例。

    CMakeLists.txt:

    cmake_minimum_required(VERSION 3.2)
    project(stripped-down C)
    
    add_executable(main main.c)
    
    install(TARGETS main
        RUNTIME DESTINATION bin
        )
    
    set(CPACK_GENERATOR "DEB;TGZ")
    set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_SOURCE_DIR}/package.txt)
    
    set(CPACK_PACKAGE_CONTACT "Some One <some.one@somewhere.com>")
    
    include(CPack)
    

    ${CMAKE_SOURCE_DIR}/package.txt:

    IF (CPACK_GENERATOR MATCHES "DEB")
        set(CPACK_PACKAGING_INSTALL_PREFIX "/opt")
    ELSEIF(CPACK_GENERATOR MATCHES "TGZ")
        set(CPACK_PACKAGING_INSTALL_PREFIX "")
    ENDIF()
    

    【讨论】:

      猜你喜欢
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多