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