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).
Целевые задачи упаковки
Если 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 -
Описание проекта, используемое, например, в начальном экране установочных файлов, сгенерированных CPack для Windows. Если не задано, значение этой переменной заполняется из файла, указанного в
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. Если вы хотите установить файл лицензии (возможно, такой же, как этот) вместе с проектом, вам необходимо добавить соответствующую команду CMake
install()в вашCMakeLists.txt.
-
CPACK_RESOURCE_FILE_README -
Файл ReadMe, который будет встроен в установщик. Он обычно подробно описывает назначение проекта во время установки. Не все генераторы CPack используют этот файл.
-
CPACK_RESOURCE_FILE_WELCOME -
Файл приветствия, который будет встроен в установщик. Он приветствует пользователей этого установщика. Обычно используется в графических установщиках в Windows и Mac OS X.
-
CPACK_MONOLITHIC_INSTALL -
Отключает механизм установки на основе компонентов. При установке компонента спецификация игнорируется, и все установленные элементы помещаются в один пакет «МОНОЛИТНЫЙ». Некоторые генераторы 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 и OSXX11 не используют).
-
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*может* использовать преимущества нескольких ядер. Другие методы сжатия игнорируют это значение и используют только один поток.Новое в версии 3.21: Официальные двоичные файлы CMake, доступные по
cmake.orgсейчас поставляются сliblzma, который поддерживает параллельное сжатие. Более старые версии этого не делали.
Переменные для генераторов пакетов исходных кодов
Следующие переменные CPack специфичны для пакетов исходных кодов и не повлияют на бинарные пакеты:
-
CPACK_SOURCE_PACKAGE_FILE_NAME -
Имя пакета исходных кодов. Например,
cmake-2.6.1.
-
CPACK_SOURCE_STRIP_FILES -
Список файлов в дереве исходных кодов, которые будут удалены. Начиная с CMake 2.6.0,
CPACK_SOURCE_STRIP_FILESбудет логической переменной, которая включает удаление всех файлов (список файлов оценивается какTRUEв CMake, поэтому это изменение совместимо).
-
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_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.
© 2000–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.22/module/CPack.html