Путь установки пакета CMake-CPack Кошмар - PullRequest
15 голосов
/ 15 июля 2011

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

Пожалуйста, сообщите мне.

Peter

Ответы [ 2 ]

13 голосов
/ 09 сентября 2011

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

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.

1 голос
/ 29 августа 2011

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