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 это не так.