CPack без проекта CMake - PullRequest
       24

CPack без проекта CMake

0 голосов
/ 24 января 2019

Я пытаюсь создать пакет, используя CPack, но изо всех сил пытаюсь найти примеры или документацию, которая поможет мне в моем случае использования, когда я не собирал код, используя проект cmake.У меня есть проект GO, который создал двоичный файл, который я хочу установить в системе через RPM в Linux или MSI в Windows.

Моя структура папок выглядит так:

HelloWorld
 |
 +---bin
 |    |
 |    +---l_run_me
 |    +---w_run_me.exe
 |
 +---src
 |    |
 |    +---hello_world.go
 |
 +---helper
 |     |
 |     +---pre_in.sh
 |     +---pre_un.sh
 |     +---post_in.sh
 |     +---post_un.sh
 |     +---wix_patch.xml
 |
 +---Copyright.txt
 +---CPackConfig.cmake

Файлы, выбранные для установщика, будут зависеть от ОС, для которой я собирал.Все это казалось довольно тривиальным для Windows с использованием генератора WiX.Мне удалось собрать установщик с кодом, указанным ниже:

SET(CPACK_PACKAGE_NAME "HelloWorld")
SET(CPACK_PACKAGE_VENDOR "ABC Software")
SET(CPACK_PACKAGE_DESCRIPTION "A long package description should go here")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A summary description goes here")
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_LIST_DIR}/Copyright.txt")
SET(CPACK_PACKAGE_VERSION_MAJOR "1")
SET(CPACK_PACKAGE_VERSION_MINOR "0")
SET(CPACK_PACKAGE_VERSION_PATCH "0")
SET(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
SET(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CMAKE_HOST_SYSTEM_NAME})
SET(CPACK_PACKAGE_INSTALL_DIRECTORY "HelloWorld")
SET(CPACK_INSTALLED_DIRECTORIES "${CMAKE_CURRENT_LIST_DIR}/bin" "/")
if(WIN32)
    SET(CPACK_GENERATOR WIX)
    SET(CPACK_WIX_UPGRADE_GUID "b7cf4d8b-7479-481d-8d4a-b3db19545b43")
    SET(CPACK_WIX_PRODUCT_GUID "b0e09ef0-80bc-4b20-b7e0-98bc75bd2670")
    SET(CPACK_WIX_SIZEOF_VOID_P "4")
    SET(CPACK_WIX_PATCH_FILE "${CMAKE_CURRENT_LIST_DIR}/patch.xml")
endif()

И при запуске получившегося MSI установил двоичный файл в C: \ Program Files (x86) \ HelloWorld , как я и ожидал.

Теперь для linux я добавляю условие вроде:

if(WIN32)
    ....
elseif(UNIX)
    SET(CPACK_GENERATOR RPM)
endif

ожидание RPM, который установит двоичный файл в / usr / local / HelloWorld (какза $ {CMAKE_INSTALL_PREFIX} указывает), но вместо этого я получаю двоичный файл, помещенный в / .

Я хочу, чтобы двоичный файл был установлен в / var / opt / HelloWorld/ , поэтому я попытался установить еще несколько переменных в соответствии с документацией CPack:

SET(CMAKE_INSTALL_PREFIX "/var/opt/${CPACK_PACKAGE_NAME}")
SET(CPACK_PACKAGING_INSTALL_PREFIX "/var/opt/${CPACK_PACKAGE_NAME}")
SET(CPACK_PACKAGE_DEFAULT_LOCATION "/var/opt/${CPACK_PACKAGE_NAME}") 

, но ничего не получилось, как я ожидал.Я заметил, что единственное место, где у меня был указан путь / , было, когда я установил $ {CPACK_INSTALLED_DIRECTORIES}.Теперь это, кажется, игнорируется в Windows, но в Linux это, кажется, имеет значение.

Вопросы, на которые я не могу найти ответы:

1) Используется $ {CPACK_INSTALLED_DIRECTORIES}правильный способ добавить элементы в установщик, когда нет никакого проекта cmake?Я немного опасался его использования, так как моя интерпретация документации, кажется, предполагает, что он используется для дополнительных элементов, которые не являются частью основного установщика.

2) Каков правильный CPack/ CMake переменные, чтобы установить, чтобы выбрать другое место установки?Кажется, есть несколько вариантов на выбор и для Windows, $ {CPACK_PACKAGE_INSTALL_DIRECTORY}, похоже, удостоен чести, но в Linux это не так.

...