Как создать пакет Debian с помощью команды CPack (не из файлов CMake)?

У меня есть проект CMake, созданный и установленный. Теперь я хочу сгенерировать из него пакет Debian (*.deb). В Интернете есть много инструкций, как создать пакет debian с добавлением чего-либо в файлы CMake, но проект, который я собрал, не принадлежит мне, поэтому мне не следует изменять его исходники. Я нашел команду cpack, которая также может генерировать пакеты deb. К сожалению, когда я пытаюсь использовать команду:

cpack -G DEB -C cmake/build/directory -P myPackage.deb -R 1.0.

Я понимаю:

CPack Error: Please specify build tree of the project that uses CMake using CPACK_INSTALL_CMAKE_PROJECTS, specify CPACK_INSTALL_COMMANDS, CPACK_INSTALL_SCRIPT, or CPACK_INSTALLED_DIRECTORIES.

К сожалению, параметры не могут быть указаны в командах в справке:

cpack --help

Итак, возможно ли сгенерировать пакет Debian с помощью команды cpack без каких-либо изменений в файлах CMake?


person baziorek    schedule 01.06.2020    source источник
comment
Итак, возможно ли сгенерировать пакет Debian с помощью команды cpack без каких-либо изменений в файлах CMake? - Возможно, да, вы могли бы использовать CPack без проекта CMake. Но вы правы, что команды CPack просто не описаны в официальной документации. То же самое верно и для других производных CMake, таких как CTest.   -  person Tsyvarev    schedule 01.06.2020
comment
но проект, который я построил, не принадлежит мне, поэтому я не должен изменять его исходный код. - Не уверен в юридических вопросах, но есть способы изменить файлы проекта и по-прежнему иметь возможность синхронизировать их с репозиторием проекта. Например. вы можете создать патч и применить его, когда захотите упаковать проект. Если вы хотите создать проект CMake, который управляет упаковкой внешнего проекта, вы можете использовать ExternalProject_Add для этой цели. Его опция PATCH_COMMAND может использоваться для применения патча.   -  person Tsyvarev    schedule 01.06.2020


Ответы (1)


Когда CMakeLists.txt включает модуль CPack, он создает CPackConfig.cmake в верхнем каталоге сборки. Этот файл конфигурации используется по умолчанию для CPack, но вы можете переопределить его с помощью параметра --config.

Файл состоит из набора set() команд для установки различных CPACK_* переменных. . Чтобы создать пакет (DEB в вашем вопросе), вы должны написать файл конфигурации «вручную» и установить важные переменные для CPack, а также некоторые для генератора DEB (т.е. CPACK_DEBIAN_*).

Как правило, этот конфиг (переменные в нем) описывает, какой проект(ы) и его компоненты включать в пакет(ы), определяет некоторые метаданные и так далее... Теоретически, вы можете передать все, что определяет, через -D параметры до cpack(1). На практике, ИМХО, проще будет написать CPackConfig.cmake %)

Имея этот файл конфигурации, эта команда должна сделать то, что вы хотите:

$ cpack -G DEB

(или просто cpack, если ваша конфигурация описывает только пакет Debian для сборки).

person zaufi    schedule 02.06.2020