CPack/CMake: разные префиксы установки для каждого CPACK_GENERATOR

Как указать разные префиксы установки для разных CPACK_GENERATOR?

Например:

  • пакет DEB должен быть установлен в /opt/project
  • архив TGZ должен состоять только из каталога project

Из документации я понял, что мне придется использовать переменная 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.


person dubbaluga    schedule 19.06.2015    source источник


Ответы (1)


Наконец, я узнал, что было не так. У меня был установлен CPACK_SET_DESTDIR флаг. Это заставляет 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()
person dubbaluga    schedule 27.06.2015