Модуль 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 для конечного пакета, чтобы гарантировать, что он действительно автономный.
Добавлена в версии 3.6: В качестве необязательного параметра (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), если приложение не проходит проверку.
Добавлена в версии 3.6: В качестве необязательного параметра (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.
Добавлена в версии 3.6: В качестве необязательного параметра (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, предполагается, что они существуют везде.
Добавлена в версии 3.6: В качестве необязательного параметра (IGNORE_ITEM) можно передать список имён файлов, которые будут проигнорированы (например, IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe").
verify_bundle_symlinks(<bundle> <result_var> <info_var>)
Проверяет, что все символьные ссылки, найденные в пакете <bundle>, указывают на другие файлы, которые также уже находятся в пакете... Любая ссылка на внешний файл приводит к тому, что эта функция завершает проверку ошибкой.
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.29/module/BundleUtilities.html