Кошмар пути установки пакета 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? потому что описание документации об этой переменной действительно привлекательно, и это действительно то, что я хочу, но я просто не мог заставить его работать.

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

Питер


person Peter Lee    schedule 15.07.2011    source источник


Ответы (2)


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

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.

person Doran    schedule 09.09.2011
comment
Я попробую ваше предложение в следующий понедельник и сообщу вам о результатах. Спасибо. - person Peter Lee; 11.09.2011
comment
Спойлер: все равно не работает! - person Sdra; 06.01.2021

Пути, используемые 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)

Или совсем другой каталог:

INSTALL(TARGETS ${APPLICATION} DESTINATION /opt/foo/bar)
person Terrence    schedule 29.08.2011
comment
Я смущен. Я использую CPACK, чтобы упаковать его, чтобы он установил приложение туда, куда я хочу. В директиве INSTALL я всегда устанавливаю папку или файлы по относительному пути к INSTALL_PREFIX/DIRECTORY. - person Peter Lee; 29.08.2011
comment
Вам нужен только относительный путь в месте назначения установки — он будет установлен относительно CMAKE_INSTALL_PREFIX автоматически, указывать не нужно. Указание абсолютного пути — это удобный способ запутаться во всей этой установке. - person Ryan Pavlik; 06.09.2012