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

Я пытаюсь создать пакет, используя 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 это не так.

0 ответов

Другие вопросы по тегам