CPack / CMake:每个CPACK_GENERATOR的安装前缀不同

时间:2015-06-19 11:44:12

标签: cmake cpack

如何为不同的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

1 个答案:

答案 0 :(得分:4)

最后,我发现了什么是错的。我设置了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()