2015-06-19 4 views
0

Как указать различные установочные префиксы для разных CPACK_GENERATOR?CPack/CMake: разные установочные префиксы на 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.

ответ

2

Наконец-то я узнал, что случилось. У меня был комплект CPACK_SET_DESTDIRflag. Это заставляет 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 <[email protected]>") 

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()