Spec-Zone.ru › CMake 3.17

Модуль: BundleUtilities

Функции для сборки автономного приложения-пакета.

Коллекция функций утилиты CMake, полезных для работы с .app пакетами на Mac и пакетаподобными каталогами в любой ОС.

Данный модуль предоставляет следующие функции:

fixup_bundle
copy_and_fixup_bundle
verify_app
get_bundle_main_executable
get_dotapp_dir
get_bundle_and_executable
get_bundle_all_executables
get_item_key
get_item_rpaths
clear_bundle_keys
set_bundle_key_values
get_bundle_keys
copy_resolved_item_into_bundle
copy_resolved_framework_into_bundle
fixup_bundle_item
verify_bundle_prerequisites
verify_bundle_symlinks

Требуется CMake 2.6 или выше, так как используются функции, оператор break и PARENT_SCOPE. Также зависит от GetPrerequisites.cmake.

НЕ ИСПОЛЬЗУЙТЕ ЭТИ ФУНКЦИИ НА ЭТАПЕ КОНФИГУРАЦИИ (из CMakeLists.txt)! Вместо этого вызывайте их из правила install(CODE) или install(SCRIPT).

fixup_bundle(<app> <libs> <dirs>)

Исправляет <app> пакет на месте и делает его автономным, чтобы его можно было перетащить и скопировать на другой компьютер и запустить на этом компьютере, при условии совместимости всех системных библиотек.

Если вы передаете плагины в fixup_bundle в качестве параметра libs, вы должны установить или скопировать их в пакет перед вызовом fixup_bundle. Параметр <libs> — это список библиотек, которые необходимо исправить, но которые нельзя определить по результатам анализа вывода otool (т.е. plugins).

Собрать все ключи для всех исполняемых файлов и библиотек в пакете, а затем для каждого ключа скопировать каждый предварительный зависимость в пакет. Затем исправить каждый из них в соответствии со своим собственным списком предварительных зависимостей.

Затем очистить все ключи и вызвать verify_app для окончательного пакета, чтобы гарантировать его полную автономность.

В качестве необязательного параметра (IGNORE_ITEM) можно передать список имен файлов, которые будут проигнорированы (например, IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe").

copy_and_fixup_bundle(<src> <dst> <libs> <dirs>)

Создает копию пакета <src> в местоположение <dst> и затем исправляет новый скопированный пакет на месте в <dst>.

verify_app(<app>)

Проверяет, является ли приложение <app> допустимым на основе анализа, выполняемого с помощью инструментов. Вызывает message(FATAL_ERROR), если приложение не прошло проверку.

В качестве необязательного параметра (IGNORE_ITEM) можно передать список имен файлов, которые будут проигнорированы (например, IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe")

get_bundle_main_executable(<bundle> <result_var>)

Результатом будет полное имя пути к основному исполняемому файлу пакета или строка с префиксом error:, если его нельзя определить.

get_dotapp_dir(<exe> <dotapp_dir_var>)

Возвращает ближайший родительский каталог, имя которого заканчивается на .app, учитывая полный путь к исполняемому файлу. Если такого родительского каталога нет, то просто вернуть каталог, содержащий исполняемый файл.

Возвращаемый каталог может или не может существовать.

get_bundle_and_executable(<app> <bundle_var> <executable_var> <valid_var>)

Принимает имя каталога .app или имя исполняемого файла, вложенного в каталог .app, и возвращает путь к каталогу .app в <bundle_var> и путь к его главному исполняемому файлу в <executable_var>.

get_bundle_all_executables(<bundle> <exes_var>)

Рекурсивно сканирует пакет <bundle> для поиска всех исполняемых файлов <exes_var> и накапливает их в переменной.

get_item_key(<item> <key_var>)

Учитывая имя файла <item>, генерируется ключ <key_var>, который должен быть уникальным с учетом набора библиотек, которые необходимо скопировать или исправить, чтобы сделать пакет автономным. Это по существу имя файла, включая расширение, с . замененным на _.

Этот ключ используется в качестве префикса для переменных CMake, чтобы мы могли связать набор переменных с заданным элементом на основе его ключа.

clear_bundle_keys(<keys_var>)

Перебрать список ключей <keys_var>, очищая все переменные, связанные с каждым ключом. После цикла очистить сам список ключей.

Вызывающий get_bundle_keys должен вызвать clear_bundle_keys после завершения работы со списком ключей.

set_bundle_key_values(<keys_var> <context> <item> <exepath> <dirs>
                      <copyflag> [<rpaths>])

Добавить ключ <keys_var> в список (при необходимости) для данного элемента. При добавлении также установить все переменные, связанные с этим ключом.

get_bundle_keys(<app> <libs> <dirs> <keys_var>)

Перебрать все исполняемые и библиотечные файлы внутри пакета <app> (и указанные в дополнительных <libs>) и собрать список ключей, представляющих их. Установить значения, связанные с каждым ключом, таким образом, чтобы мы могли перебрать все их и скопировать предварительные зависимости в пакет, а затем выполнить соответствующие install_name_tool исправления.

В качестве необязательного параметра (IGNORE_ITEM) можно передать список имен файлов, которые будут проигнорированы (например, IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe")

copy_resolved_item_into_bundle(<resolved_item> <resolved_embedded_item>)

Скопировать разрешенный элемент в пакет, если необходимо. Копирование не требуется, если <resolved_item> «одинаково», что и <resolved_embedded_item>.

copy_resolved_framework_into_bundle(<resolved_item> <resolved_embedded_item>)

Скопировать разрешенный фреймворк в пакет, если необходимо. Копирование не требуется, если <resolved_item> «одинаково», что и <resolved_embedded_item>.

По умолчанию BU_COPY_FULL_FRAMEWORK_CONTENTS не установлено. Если вы хотите встраивать полные фреймворки в свои пакеты, установите BU_COPY_FULL_FRAMEWORK_CONTENTS в ON перед вызовом fixup_bundle. По умолчанию COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE копирует сам фреймворк dylib плюс каталог фреймворка Resources.

fixup_bundle_item(<resolved_embedded_item> <exepath> <dirs>)

Получить непосредственные/несистемные предварительные зависимости <resolved_embedded_item>. Для каждой предварительной зависимости изменить способ ссылки на значение переменной с ключом _EMBEDDED_ITEM для этой предварительной зависимости (скорее всего, изменив на ссылку стиля @executable_path).

Эта функция требует, чтобы <resolved_embedded_item> уже inside был в пакете. Другими словами, если вы передаете плагины в fixup_bundle в качестве параметра libs, вы должны установить или скопировать их в пакет перед вызовом fixup_bundle. Параметр libs — это список библиотек, которые необходимо исправить, но которые нельзя определить по анализу вывода otool (т.е. plugins).

Также изменить идентификатор исправляемого элемента на его собственное значение _EMBEDDED_ITEM.

Накопить изменения в локальной переменной и сделать одно вызов install_name_tool в конце функции со всеми изменениями сразу.

Если переменная BU_CHMOD_BUNDLE_ITEMS установлена, элементы пакета будут помечены как доступные для записи перед тем, как install_name_tool попытается изменить их.

verify_bundle_prerequisites(<bundle> <result_var> <info_var>)

Проверяет, что сумма всех предварительных зависимостей всех файлов внутри пакета содержится в пакете или являются библиотеками system, предположительно существующими повсюду.

В качестве необязательного параметра (IGNORE_ITEM) можно передать список имен файлов, которые будут проигнорированы (например, IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe")

verify_bundle_symlinks(<bundle> <result_var> <info_var>)

Проверяет, что все символьные ссылки, найденные в пакете <bundle> пакета, указывают на другие файлы, которые уже также находятся в пакете… Любая ссылка на внешний файл приводит к тому, что эта функция завершает проверку неудачно.

© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.17/module/BundleUtilities.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API