CPack
Настройка генераторов для установочных файлов и исходных пакетов.
Введение
Модуль CPack генерирует файлы конфигурации CPackConfig.cmake и CPackSourceConfig.cmake. Они предназначены для последующего использования в программе cpack, где они управляют генерацией установочных файлов и/или исходных пакетов.
В зависимости от генератора CMake, модуль CPack может также добавить две новые целевые задачи, package и package_source. Подробности см. в разделе целевых задач пакета ниже.
Сгенерированные установочные файлы будут содержать все файлы, установленные с помощью команды CMake install() (и устаревших команд install_files(), install_programs() и install_targets()). Обратите внимание, что опция DESTINATION команды install() должна быть относительным путем; в противном случае установленные файлы игнорируются CPack.
Некоторые типы установочных файлов могут быть настроены таким образом, чтобы пользователи могли выбирать отдельные компоненты приложения для установки. Дополнительные сведения см. в модуле CPackComponent.
Исходные пакеты (настраиваемые через CPackSourceConfig.cmake и генерируемые генератором CPack Archive Generator) будут содержать все исходные файлы в каталоге проекта, за исключением тех, которые указаны в CPACK_SOURCE_IGNORE_FILES.
Генераторы CPack
Переменная CPACK_GENERATOR имеет разное значение в разных контекстах. В файле CMakeLists.txt, CPACK_GENERATOR является списком генераторов; а когда cpack запускается без других аргументов, он итерирует по этому списку и создает один пакет для каждого генератора. В CPACK_PROJECT_CONFIG_FILE, CPACK_GENERATOR является строкой, называющей один генератор. Если вам нужен логика, специфичная для каждого генератора cpack, для управления другими настройками cpack, вам необходим CPACK_PROJECT_CONFIG_FILE. Если он установлен, CPACK_PROJECT_CONFIG_FILE включается автоматически для каждого генератора. Он должен только содержать переопределения.
Вот как это работает:
- Запускается
cpack - включается
CPackConfig.cmake - происходит итерация по генераторам, заданным опцией командной строки
-G, или, если такая опция не указана, по списку генераторов, заданному переменнойCPACK_GENERATOR, заданной в файле входных данныхCPackConfig.cmake. -
для каждого генератора:
- переменная
CPACK_GENERATORустанавливается на текущий генератор - включается
CPACK_PROJECT_CONFIG_FILE - создается пакет для этого генератора
- переменная
Вот ключевой момент: для каждого генератора, перечисленного в CPACK_GENERATOR в CPackConfig.cmake, cpack сбросит CPACK_GENERATOR в текущий используемый и затем включит CPACK_PROJECT_CONFIG_FILE.
Список доступных генераторов см. в cpack-generators(7).
Целевые задачи пакета и package_source
Если CMake запускается с генератором Makefile, Ninja или Xcode, то include(CPack) генерирует целевую задачу package. Это позволяет создать установочный файл из CMake, Make или Ninja: Вместо cpack, можно вызвать cmake --build . --target package или make package или ninja package. Генератор VS создает целевую задачу в верхнем регистре PACKAGE.
Если CMake запускается с генератором Makefile или Ninja, то include(CPack) также генерирует целевую задачу package_source. Для построения исходного пакета вместо cpack -G TGZ --config CPackSourceConfig.cmake можно вызвать cmake --build . --target package_source, make package_source, или ninja package_source.
Переменные, общие для всех генераторов CPack
Прежде чем включать этот модуль CPack в свой файл CMakeLists.txt, можно установить различные переменные для настройки результирующих установочных файлов. Наиболее часто используемые переменные:
-
CPACK_PACKAGE_NAME -
Имя пакета (или приложения). Если не указано, по умолчанию используется имя проекта.
-
CPACK_PACKAGE_VENDOR -
Имя поставщика пакета. (например, "Kitware"). По умолчанию "Humanity".
-
CPACK_PACKAGE_DIRECTORY -
Каталог, в котором CPack выполняет упаковку. Если не задано, по умолчанию используется каталог сборки. Эта переменная может быть определена в файле конфигурации CPack или из опции командной строки
cpack-B. Если задано, опция командной строки переопределяет значение, найденное в файле конфигурации.
-
CPACK_PACKAGE_VERSION_MAJOR -
Основная версия пакета. Эта переменная всегда устанавливается, но ее значение по умолчанию зависит от того, были ли предоставлены сведения о версии команде
project()в файле CMakeLists.txt верхнего уровня. Если сведения о версии были предоставлены, значение по умолчанию будетCMAKE_PROJECT_VERSION_MAJOR. Если сведения о версии не были предоставлены, по умолчанию будет версия 0.1.1, что приведет к тому, чтоCPACK_PACKAGE_VERSION_MAJORбудет иметь значение по умолчанию 0.
-
CPACK_PACKAGE_VERSION_MINOR -
Дополнительная версия пакета. Значение по умолчанию определяется на основе того, были ли предоставлены сведения о версии команде
project()в файле CMakeLists.txt верхнего уровня. Если сведения о версии были предоставлены, значение по умолчанию будетCMAKE_PROJECT_VERSION_MINOR, но если компонент дополнительной версии не был указан, тоCPACK_PACKAGE_VERSION_MINORостанется неопределенным. Если вообще не была указана версия проекта, по умолчанию будет версия 0.1.1, что приведет к тому, чтоCPACK_PACKAGE_VERSION_MINORбудет иметь значение по умолчанию 1.
-
CPACK_PACKAGE_VERSION_PATCH -
Версия исправления пакета. Значение по умолчанию определяется на основе того, были ли предоставлены сведения о версии команде
project()в файле CMakeLists.txt верхнего уровня. Если сведения о версии были предоставлены, значение по умолчанию будетCMAKE_PROJECT_VERSION_PATCH, но если компонент версии исправления не был указан, тоCPACK_PACKAGE_VERSION_PATCHостанется неопределенным. Если вообще не была указана версия проекта, по умолчанию будет версия 0.1.1, что приведет к тому, чтоCPACK_PACKAGE_VERSION_PATCHбудет иметь значение по умолчанию 1.
-
CPACK_PACKAGE_DESCRIPTION -
Описание проекта, используемое в таких местах, как экран введения в установочных файлах Windows, сгенерированных с помощью CPack. Если не задано, значение этой переменной заполняется из файла, указанного в
CPACK_PACKAGE_DESCRIPTION_FILE.
-
CPACK_PACKAGE_DESCRIPTION_FILE -
Текстовый файл, используемый для описания проекта, когда
CPACK_PACKAGE_DESCRIPTIONне задан явно. Значение по умолчанию дляCPACK_PACKAGE_DESCRIPTION_FILEуказывает на встроенный шаблонный файлTemplates/CPack.GenericDescription.txt.
-
CPACK_PACKAGE_DESCRIPTION_SUMMARY -
Краткое описание проекта (только несколько слов). Если переменная
CMAKE_PROJECT_DESCRIPTIONзадана, она используется в качестве значения по умолчанию; в противном случае значением по умолчанию будет строка, сгенерированная CMake на основеCMAKE_PROJECT_NAME.
-
CPACK_PACKAGE_HOMEPAGE_URL -
URL домашней страницы проекта. Значение по умолчанию берется из переменной
CMAKE_PROJECT_HOMEPAGE_URL, которая устанавливается командой верхнего уровняproject(), иначе значение по умолчанию будет пустым, если URL не был предоставлен командеproject().
-
CPACK_PACKAGE_FILE_NAME -
Имя файла пакета для генерации, без расширения. Например,
cmake-2.6.1-Linux-i686. Значение по умолчанию:${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}
-
CPACK_PACKAGE_INSTALL_DIRECTORY -
Директория установки на целевой системе. Может использоваться некоторыми генераторами CPack, такими как NSIS, для создания каталога установки, например, "CMake 2.5" ниже префикса установки. Все установленные элементы будут помещены в эту директорию.
-
CPACK_PACKAGE_ICON -
Изображение бренда, которое будет отображаться в установщике (используется графическими установщиками).
-
CPACK_PACKAGE_CHECKSUM -
Новое в версии 3.7.
Алгоритм, который будет использоваться для генерации дополнительного файла с контрольной суммой пакета. Имя выходного файла будет:
${CPACK_PACKAGE_FILE_NAME}.${CPACK_PACKAGE_CHECKSUM}Поддерживаются алгоритмы, перечисленные командой string(<HASH>).
-
CPACK_PROJECT_CONFIG_FILE -
Файл конфигурации CPack проекта на этапе выполнения cpack. Этот файл включается во время cpack один раз на генератор после того, как CPack установил
CPACK_GENERATORна фактический используемый генератор. Это позволяет задавать переменныеCPACK_*на этапе cpack для каждого генератора.
-
CPACK_RESOURCE_FILE_LICENSE -
Лицензия, которая будет встроена в установщик. Обычно она отображается пользователю установщиком (часто с явной кнопкой "Принять" для графических установщиков) перед установкой. Этот файл лицензии НЕ добавляется в установленные файлы, но используется некоторыми генераторами CPack, такими как NSIS. Если вы хотите использовать символы UTF-8, файл должен быть закодирован в UTF-8 с BOM. Если вы хотите установить файл лицензии (возможно, такой же, как этот) вместе с вашим проектом, вы должны добавить соответствующую команду CMake
install()в свойCMakeLists.txt.
-
CPACK_RESOURCE_FILE_README -
Файл ReadMe, который будет встроен в установщик. Он подробно описывает назначение проекта во время установки. Не все генераторы CPack используют этот файл.
-
CPACK_RESOURCE_FILE_WELCOME -
Файл приветствия, который будет встроен в установщик. Он приветствует пользователей этого установщика. Обычно используется в графических установщиках в Windows и Mac OS X.
-
CPACK_MONOLITHIC_INSTALL -
Отключает механизм установки по компонентам. При установке игнорируется спецификация компонентов, и все установленные элементы помещаются в один пакет "MONOLITHIC". Некоторые генераторы CPack выполняют монолитное пакетирование по умолчанию и могут быть запрошены выполнить пакетирование по компонентам путем установки
CPACK_<GENNAME>_COMPONENT_INSTALLнаTRUE.
-
CPACK_GENERATOR -
Список генераторов CPack для использования. Если не указано, CPack создаст набор параметров, следующих схеме именования
CPACK_BINARY_<GENNAME>(например,CPACK_BINARY_NSIS), позволяя пользователю включать/выключать отдельные генераторы. Если опция-Gуказана в командной строке командыcpack, она переопределяет эту переменную и любые параметрыCPACK_BINARY_<GENNAME>.
-
CPACK_OUTPUT_CONFIG_FILE -
Имя файла конфигурации двоичного CPack. Этот файл — конфигурация CPack, сгенерированная модулем CPack для двоичных установщиков. По умолчанию
CPackConfig.cmake.
-
CPACK_PACKAGE_EXECUTABLES -
Список каждого исполняемого файла и соответствующей текстовой метки для создания ярлыков в меню «Пуск». Например, установка этого значения на список
ccmake;CMakeсоздаст ярлык с именем «CMake», который будет запускать установленный исполняемый файл ccmake. Не все генераторы CPack его используют (по крайней мере, NSIS и WIX).
-
CPACK_STRIP_FILES -
Список файлов для удаления. Начиная с CMake 2.6.0,
CPACK_STRIP_FILESбудет булевой переменной, которая включает удаление всех файлов (список файлов оценивается какTRUEв CMake, поэтому это изменение совместимо).
-
CPACK_VERBATIM_VARIABLES -
Новое в версии 3.4.
Если установлено значение
TRUE, значения переменных с префиксомCPACK_будут экранированы перед записью в конфигурационные файлы, чтобы программа cpack получила их точно так, как они были указаны. В противном случае такие символы, как кавычки и обратные слэши, могут вызвать ошибки анализа или изменить значение, получаемое программой cpack. По умолчаниюFALSEдля обратной совместимости.
-
CPACK_THREADS -
Новое в версии 3.20.
Количество потоков для использования при выполнении параллельных операций, таких как сжатие пакета установщика.
Некоторые методы сжатия, используемые генераторами CPack, такие как Debian или Archive, могут использовать несколько ядер процессора для ускорения сжатия.
CPACK_THREADSможно установить, чтобы указать, сколько потоков будет использоваться для сжатия.Положительное целое число может использоваться для указания точного желаемого количества потоков.
При задании отрицательного целого числа CPack будет использовать абсолютное значение в качестве верхней границы, но может выбрать меньшее значение в зависимости от доступной аппаратной конвейерности.
При задании 0 CPack попытается использовать все доступные ядра процессора.
По умолчанию
CPACK_THREADSустановлено в1.Следующие методы сжатия могут использовать несколько ядер:
-
xz -
Поддерживается, если CMake скомпилирован с
liblzma, который поддерживает параллельное сжатие.Новое в версии 3.21: Официальные двоичные файлы CMake, доступные по
cmake.org, теперь поставляются сliblzma, который поддерживает параллельное сжатие. Более старые версии этого не поддерживали. -
zstd -
Новое в версии 3.24.
Поддерживается, если CMake скомпилирован с libarchive 3.6 или выше. Официальные двоичные файлы CMake, доступные по
cmake.orgего поддерживают.
Другие методы сжатия игнорируют это значение и используют только один поток.
-
Переменные для генераторов пакетов исходного кода
Следующие переменные CPack специфичны для пакетов исходного кода и не повлияют на двоичные пакеты:
-
CPACK_SOURCE_PACKAGE_FILE_NAME -
Имя пакета исходного кода. Например,
cmake-2.6.1.
-
CPACK_SOURCE_STRIP_FILES -
Список файлов в дереве исходных кодов, которые будут удалены. Начиная с CMake 2.6.0,
CPACK_SOURCE_STRIP_FILESбудет логической переменной, которая включает удаление всех файлов (список файлов в CMake эквивалентенTRUE, поэтому это изменение совместимо).
-
CPACK_SOURCE_GENERATOR -
Список генераторов, используемых для исходных пакетов. Как и в случае с
CPACK_GENERATOR, если это не указано, CPack создаст набор опций (например,CPACK_SOURCE_ZIP) позволяющих пользователю выбрать, какие пакеты будут сгенерированы.
-
CPACK_SOURCE_OUTPUT_CONFIG_FILE -
Имя файла конфигурации CPack для исходных установок. Этот файл является конфигурацией CPack, сгенерированной модулем CPack для установщиков исходных кодов. По умолчанию
CPackSourceConfig.cmake.
-
CPACK_SOURCE_IGNORE_FILES -
Шаблон файлов в дереве исходных кодов, которые не будут включены в пакет при создании исходного пакета. Это список шаблонов регулярных выражений (которые должны быть корректно экранированы), например,
/CVS/;/\\.svn/;\\.swp$;\\.#;/#;.*~;cscope.*
Переменные для расширенного использования
Следующие переменные предназначены для продвинутого использования CPack:
-
CPACK_CMAKE_GENERATOR -
Какой генератор CMake следует использовать, если проект является проектом CMake. По умолчанию используется значение
CMAKE_GENERATOR. Не многим пользователям захочется изменить это значение.
-
CPACK_INSTALL_CMAKE_PROJECTS -
Список из четырёх значений, определяющих, какой проект установить. Четыре значения: Директория сборки, Название проекта, Компонент проекта, Директория. Если опущено, CPack создаст установщик, который установит всё.
-
CPACK_SYSTEM_NAME -
Имя системы, по умолчанию совпадает со значением
CMAKE_SYSTEM_NAME, за исключением Windows, где это будетwin32илиwin64.
-
CPACK_PACKAGE_VERSION -
Полная версия пакета, используется внутри. По умолчанию строится из
CPACK_PACKAGE_VERSION_MAJOR,CPACK_PACKAGE_VERSION_MINORиCPACK_PACKAGE_VERSION_PATCH.
-
CPACK_TOPLEVEL_TAG -
Директория для установленных файлов.
-
CPACK_INSTALL_COMMANDS -
Дополнительные команды для установки компонентов. Переменная окружения
CMAKE_INSTALL_PREFIXустанавливается в временную директорию установки во время выполнения.
-
CPACK_INSTALL_SCRIPTS -
Новое в версии 3.16.
Дополнительные скрипты CMake, выполняемые CPack во время локальной установки. Они выполняются перед установкой файлов, подлежащих упаковке. Скрипты не вызываются автономной установкой (например:
make install). Для каждого скрипта будут установлены следующие переменные:CMAKE_CURRENT_SOURCE_DIR,CMAKE_CURRENT_BINARY_DIRиCMAKE_INSTALL_PREFIX(которая устанавливается в директорию временной установки). В качестве альтернативы для исторических причин поддерживается единственноеCMAKE_INSTALL_SCRIPT, но его значение игнорируется, если установленоCMAKE_INSTALL_SCRIPTS, и будет выведено предупреждение.См. также
CPACK_PRE_BUILD_SCRIPTSиCPACK_POST_BUILD_SCRIPTS, которые можно использовать для указания скриптов, которые будут выполнены позже в процессе упаковки.
-
CPACK_PRE_BUILD_SCRIPTS -
Новое в версии 3.19.
Список скриптов CMake, которые нужно выполнить после того, как CPack установил файлы для упаковки в временную директорию и перед созданием пакетов из этих файлов. См. также
CPACK_INSTALL_SCRIPTSиCPACK_POST_BUILD_SCRIPTS.
-
CPACK_POST_BUILD_SCRIPTS -
Новое в версии 3.19.
Список скриптов CMake, которые нужно выполнить после того, как CPack создал итоговые пакеты и перед копированием их обратно в директорию сборки. См. также
CPACK_INSTALL_SCRIPTS,CPACK_PRE_BUILD_SCRIPTSиCPACK_PACKAGE_FILES.
-
CPACK_PACKAGE_FILES -
Новое в версии 3.19.
Список файлов пакета, созданных во временной директории, при этом каждый файл предоставляется в виде полного абсолютного пути. Эта переменная заполняется CPack непосредственно перед вызовом скриптов пост-сборки, указанных в
CPACK_POST_BUILD_SCRIPTS. Это предпочтительный способ для скриптов пост-сборки узнать набор файлов пакета для работы. Проекты не должны сами пытаться устанавливать эту переменную.
-
CPACK_INSTALLED_DIRECTORIES -
Дополнительные директории для установки.
-
CPACK_PACKAGE_INSTALL_REGISTRY_KEY -
Ключ реестра, используемый при установке этого проекта. Используется только установщиками для Windows. Значение по умолчанию основано на директории установки.
-
CPACK_CREATE_DESKTOP_LINKS -
Список ярлыков рабочего стола для создания. Каждый ярлык рабочего стола требует соответствующего ярлыка в меню «Пуск», как созданного
CPACK_PACKAGE_EXECUTABLES.
-
CPACK_BINARY_<GENNAME> -
Сгенерированные CPack опции для бинарных генераторов. Модуль
CPack.cmakeгенерирует (еслиCPACK_GENERATORне установлен) набор опций CMake (см. команду CMakeoption()), которые затем могут использоваться для выбора генератора(ов) CPack, которые нужно использовать при построении целиpackageили при запускеcpackбез опции-G.
-
CPACK_READELF_EXECUTABLE -
Новое в версии 3.25.
Укажите путь к исполняемому файлу
readelfиспользуемый CPack. Значение по умолчанию будетCMAKE_READELFпри установке. В противном случае значение по умолчанию будет пустым, и CPack воспользуетсяfind_program()для определения пути кreadelfпри необходимости.
-
CPACK_OBJCOPY_EXECUTABLE -
Новое в версии 3.25.
Укажите путь к исполняемому файлу
objcopy, используемому CPack. Значение по умолчанию будетCMAKE_OBJCOPYпри установке. В противном случае значение по умолчанию будет пустым, и CPack воспользуетсяfind_program()для определения пути кobjcopyпри необходимости.
-
CPACK_OBJDUMP_EXECUTABLE -
Новое в версии 3.25.
Укажите путь к исполняемому файлу
objdump, используемому CPack. Значение по умолчанию будетCMAKE_OBJDUMPпри установке. В противном случае значение по умолчанию будет пустым, и CPack воспользуетсяfind_program()для определения пути кobjdumpпри необходимости.
© 2000–2023 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.26/module/CPack.html