Spec-Zone.ru › CMake 3.9

Модуль 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.

FIXUP_BUNDLE(<app> <libs> <dirs>)

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

Если вы передаёте плагины функции fixup_bundle в качестве параметра libs, вы должны установить их или скопировать в пакет перед вызовом fixup_bundle. Параметр «libs» представляет собой список библиотек, которые необходимо исправить, но которые нельзя определить по анализу вывода otool. (т.е., плагины).

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

Затем очищает все ключи и вызывает 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>)

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

GET_ITEM_KEY(<item> <key_var>)

На основе имени файла (item), генерируется ключ, который должен быть уникальным с учётом набора библиотек, которые нужно скопировать или исправить, чтобы сделать пакет автономным. По существу, это имя файла, включая расширение, с заменой «.» на «_».

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

CLEAR_BUNDLE_KEYS(<keys_var>)

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

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

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

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

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

Проходит по всем исполняемым и библиотечным файлам в пакете (и предоставленным дополнительным <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 фреймворка плюс директорию ресурсов фреймворка.

FIXUP_BUNDLE_ITEM(<resolved_embedded_item> <exepath> <dirs>)

Получает прямые/несистемные зависимости resolved embedded item. Для каждой зависимости изменяет способ её ссылки на значение переменной с ключом _EMBEDDED_ITEM для этой зависимости. (Вероятнее всего, изменится на ссылку в стиле «@executable_path».)

Эта функция требует, чтобы resolved_embedded_item уже находился «внутри» пакета. Другими словами, если вы передаёте плагины функции fixup_bundle в качестве параметра libs, вы должны установить их или скопировать в пакет перед вызовом fixup_bundle. Параметр «libs» представляет собой список библиотек, которые необходимо исправить, но которые нельзя определить по анализу вывода otool. (т.е., плагины).

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

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

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

VERIFY_BUNDLE_PREREQUISITES(<bundle> <result_var> <info_var>)

Проверяет, что сумма всех зависимостей всех файлов внутри пакета содержится в пакете или является «системными» библиотеками, предполагаемыми везде.

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

VERIFY_BUNDLE_SYMLINKS(<bundle> <result_var> <info_var>)

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

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

Spec-Zone.ru

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