CPack NSIS, сгенерируйте установщик для Windows

Я пытаюсь запустить генератор пакетов в проекте VS, он падает при компиляции из-за использования абсолютного пути при установке из Targets and Files.

 ABSOLUTE path INSTALL DESTINATION forbidden (by caller): ...

Я проверил дважды, и все каталоги установки являются относительными. Я установил довольно много переменных в качестве подпапок в ${PROJECT_BINARY_DIR} (которые должны быть относительными), таких как:

set(INSTALL_DIR ${PROJECT_BINARY_DIR}/bin)
set(LIB_DIR ${PROJECT_BINARY_DIR}/bin/lib)
set(EXT_DIR ${PROJECT_BINARY_DIR}/bin/ext)
...

CMAKE/CPACK интерпретирует эти переменные как абсолютные пути? Если да, есть ли способ заставить CPack работать с этими переменными должным образом? Как использовать CPack, когда задействованы относительные пути?

Спасибо

2 ответа

Решение

Хорошо, я вижу, ${PROJECT_BINARY_DIR} интерпретируется как путь ABSOLUTE, оттуда все его подпапки будут отклонены.

Чтобы избежать этой проблемы, я заключил переменные установки в блоки if else, и если это случай упаковки, то будет использоваться относительная папка следующим образом:

if(PACK)
   set(INSTALL_DIR bin)
   set(LIB_DIR bin/lib)
   set(EXT_DIR /bin/ext)
   ...
else(PACK)
   set(INSTALL_DIR ${PROJECT_BINARY_DIR}/bin)
   set(LIB_DIR ${PROJECT_BINARY_DIR}/bin/lib)
   set(EXT_DIR ${PROJECT_BINARY_DIR}/bin/ext)
   ...
endif(PACK)

это решает это, но это действительно грязно, ожидая лучшей функции в новой версии CPack.

Чао

Эта фатальная ошибка говорит о том, что вам нужно указать корневой каталог установки в тот момент, когда пользователь запускает программу установки. Я предполагаю, что где-то в вашем конфиге cmake может быть такой код:

INSTALL (TARGET myApp DESTINATION ${SOME_INSTALL_PATH}/bin )

Если вы назначаете SOME_INSTALL_PATH абсолютный путь при создании кеша cmake, вы получаете ошибку CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION, которая выдает сообщение "ABSOLUTE path INSTALL DESTINATION запрещено (вызывающим абонентом)".

Чтобы решить эту проблему, либо всегда используйте относительный путь для установки DESTINATION, либо присваивайте только префикс пакета переменной SOME_INSTALL_PATH.

Для справки ниже приведена ссылка на команду INSTALL. http://www.cmake.org/cmake/help/v3.0/variable/CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.html

Также был задан похожий вопрос в списке рассылки CMake. http://public.kitware.com/pipermail/cmake/2013-May/054656.html

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