Подтвердить что ты не робот

Путь установки пакета CMake-CPack Кошмар

Я был разочарован CMake-CPack в течение почти одной недели.

Плохая вещь в онлайн-документации CMake-CPack не документирует эту часть.

После поиска в Google я нашел следующие переменные:

CPACK_PACKAGING_PREFIX          # NOT documented
CMAKE_INSTALL_PREFIX            # Documented, but the behavior seems weird
CPACK_INSTALL_PREFIX            # NOT documented
CPACK_PACKAGE_INSTALL_DIRECTORY # Documented, but this variable does NOT work as the online document described
CPACK_PACKAGING_INSTALL_PREFIX  # NOT documented

Я пытаюсь сделать следующее: упакуйте пакет Debian с помощью fakeroot make package, когда пакет установлен sudo dpkg -i MyProgramPackageName, установите его в /usr/local с помощью подкаталога MyProgramPackageName. То есть все файлы должны быть установлены под /usr/local/MyProgramPackageName-V.1.2.3.

Я пытался (CMake 2.8.3 и CMake 2.8.5) настраивать эти переменные. Я пробовал так много комбинаций, но не смог.

Единственный способ:

Set(CPACK_PACKAGING_INSTALL_PREFIX /usr/local/MyProgramPackageName-V.1.2.3)

Но эта переменная НЕ документирована, и поведение не может быть гарантировано. Если вы смущены моим вопросом, пожалуйста, сообщите мне, когда использовать CPACK_PACKAGE_INSTALL_DIRECTORY? потому что описание документации об этой переменной действительно привлекательно, и это действительно то, что я хочу, но я просто не мог заставить ее работать.

Пожалуйста, посоветуйте мне.

Петр

4b9b3361

Ответ 1

Я не нашел никакой документации для поддержки этого, но я нашел некоторые сообщения об ошибках и архивы электронной почты, которые, похоже, предполагают, что вам следует делать следующее:

set(CPACK_SET_DESTDIR true)
set(CPACK_INSTALL_PREFIX /opt/MySuperAwesomePrefix-v.1.2.3)

Если параметр CPACK_INSTALL_PREFIX не установлен, по умолчанию будет установлен CMAKE_INSTALL_PREFIX. Теперь относительные пути из install(... DESTINATION dest) будут заканчиваться как CPACK_INSTALL_PREFIX/dest внутри вашего файла пакета. Это сработало, когда я попытался сгенерировать файл deb.

Ответ 2

Пути, используемые CPACK, берутся из директив INSTALL в ваших файлах CMakeLists.txt. Это позволяет пакету результата отразить то, что сделает "make install". Это позволяет свести конфигурацию CPACK к минимуму.

Итак, из примера файла CMakeLists.txt:

INSTALL(TARGETS ${APPLICATION} DESTINATION bin)

Это будет установлено в /usr/bin или/usr/local/bin. Если вы хотите поместить его в подкаталог или совсем другой, вы можете сделать это здесь.

INSTALL(TARGETS ${APPLICATION} DESTINATION bin/myappdir)