BundleUtilities¶
用于帮助组装独立捆绑应用程序的函数。
CMake 实用工具函数集合,用于处理 Mac 上的 .app
捆绑包以及任何操作系统上的类似捆绑包的目录。
注意
请勿在配置时(从 CMakeLists.txt
中)使用这些函数。相反,从 install(CODE)
或 install(SCRIPT)
中调用它们。
函数¶
此模块提供了以下函数
- fixup_bundle¶
fixup_bundle(<app> <libs> <dirs> [IGNORE_ITEM <file>...])
就地修复
<app>
捆绑包,并使其成为独立的,以便可以将其拖放到另一台机器上并在该机器上运行,只要所有系统库都是兼容的。如果将插件作为 libs 参数传递给
fixup_bundle
,则应在调用fixup_bundle
之前安装它们或将它们复制到捆绑包中。<libs>
参数是必须修复的库列表,但不能通过otool
输出分析(即plugins
)确定。收集捆绑包中所有可执行文件和库的所有键,然后,对于每个键,将每个先决条件复制到捆绑包中。然后根据其自身的先决条件列表修复每个文件。
然后清除所有键,并在最终捆绑包上调用
verify_app
,以确保它真正是独立的。3.6 版本新增: 作为可选参数 (
IGNORE_ITEM
) 可以传递文件名列表,这些文件名将被忽略(例如IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe"
)。
- copy_and_fixup_bundle¶
copy_and_fixup_bundle(<src> <dst> <libs> <dirs>)
在位置
<dst>
创建捆绑包<src>
的副本,然后在<dst>
就地修复新的复制的捆绑包。
- verify_app¶
verify_app(<app> [IGNORE_ITEM <file>...])
根据对其运行的分析工具验证应用程序
<app>
看起来是否有效。如果应用程序未通过验证,则调用message(FATAL_ERROR)
。3.6 版本新增: 作为可选参数 (
IGNORE_ITEM
) 可以传递文件名列表,这些文件名将被忽略(例如IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe"
)
- get_bundle_main_executable¶
get_bundle_main_executable(<bundle> <result_var>)
结果将是捆绑包主可执行文件的完整路径名;如果无法确定,则结果为
error:
前缀的字符串。
- get_dotapp_dir¶
get_dotapp_dir(<exe> <dotapp_dir_var>)
给定可执行文件的完整路径,返回名称以
.app
结尾的最近的父目录。如果没有这样的父目录,则仅返回包含可执行文件的目录。返回的目录可能存在,也可能不存在。
- get_bundle_and_executable¶
get_bundle_and_executable(<app> <bundle_var> <executable_var> <valid_var>)
接受
.app
目录名称或嵌套在.app
目录中的可执行文件的名称,并在<bundle_var>
中返回.app
目录的路径,并在<executable_var>
中返回其主可执行文件的路径。
- get_bundle_all_executables¶
get_bundle_all_executables(<bundle> <exes_var>)
递归扫描
<bundle>
捆绑包中的所有<exes_var>
可执行文件,并将它们累积到一个变量中。
- get_item_key¶
get_item_key(<item> <key_var>)
给定
<item>
文件名,生成<key_var>
键,该键应是唯一的,并考虑需要复制或修复以使捆绑包独立的库集。这本质上是文件名(包括扩展名),其中.
替换为_
此键用作 CMake 变量的前缀,以便我们可以基于给定项的键将其与一组变量关联。
- get_item_rpaths¶
get_item_rpaths(<item> <rpaths_var>)
获取
<item>
文件名的 RPATHS,并将它们存储到具有提供的名称<rpaths_var>
的变量中。
- clear_bundle_keys¶
clear_bundle_keys(<keys_var>)
循环遍历
<keys_var>
键列表,清除与每个键关联的所有变量。循环结束后,清除键列表本身。get_bundle_keys
的调用者在完成键列表后应调用clear_bundle_keys
。
- set_bundle_key_values¶
set_bundle_key_values(<keys_var> <context> <item> <exepath> <dirs> <copyflag> [<rpaths>])
将
<keys_var>
键添加到给定项的列表(如果需要)。如果添加,还要设置与该键关联的所有变量。
- get_bundle_keys¶
get_bundle_keys(<app> <libs> <dirs> <keys_var> [IGNORE_ITEM <file>...])
循环遍历
<app>
捆绑包中(以及作为额外的<libs>
给出的)所有可执行文件和库文件,并累积表示它们的键列表。设置与每个键关联的值,以便我们可以循环遍历所有键,并将先决条件库复制到捆绑包中,然后执行适当的install_name_tool
修复。3.6 版本新增: 作为可选参数 (
IGNORE_ITEM
) 可以传递文件名列表,这些文件名将被忽略(例如IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe"
)
- copy_resolved_item_into_bundle¶
copy_resolved_item_into_bundle(<resolved_item> <resolved_embedded_item>)
如有必要,将已解析的项复制到捆绑包中。如果
<resolved_item>
与<resolved_embedded_item>
“相同”,则无需复制。
- copy_resolved_framework_into_bundle¶
copy_resolved_framework_into_bundle(<resolved_item> <resolved_embedded_item>)
如有必要,将已解析的框架复制到捆绑包中。如果
<resolved_item>
与<resolved_embedded_item>
“相同”,则无需复制。默认情况下,未设置
BU_COPY_FULL_FRAMEWORK_CONTENTS
。如果希望在捆绑包中嵌入完整的框架,请在调用 fixup_bundle 之前将BU_COPY_FULL_FRAMEWORK_CONTENTS
设置为ON
。默认情况下,COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE
复制框架 dylib 本身以及框架Resources
目录。
- fixup_bundle_item¶
fixup_bundle_item(<resolved_embedded_item> <exepath> <dirs>)
获取
<resolved_embedded_item>
的直接/非系统先决条件。对于每个先决条件,将其引用方式更改为该先决条件的键控变量_EMBEDDED_ITEM
的值。(最有可能更改为@executable_path
样式引用。)此函数要求
<resolved_embedded_item>
已经在
捆绑包内部。换句话说,如果将插件作为 libs 参数传递给fixup_bundle
,则应在调用fixup_bundle
之前安装它们或将它们复制到捆绑包中。libs
参数是必须修复的库列表,但不能通过 otool 输出分析确定。(即,plugins
)此外,将要修复的项的 ID 更改为其自身的
_EMBEDDED_ITEM
值。将更改累积在局部变量中,并在函数末尾使用所有更改一次调用
install_name_tool
。如果设置了
BU_CHMOD_BUNDLE_ITEMS
变量,则在install_name_tool
尝试更改捆绑包项之前,会将它们标记为可写。
- verify_bundle_prerequisites¶
verify_bundle_prerequisites(<bundle> <result_var> <info_var> [IGNORE_ITEM <file>...])
验证捆绑包内所有文件的所有先决条件的总和是否包含在捆绑包中,或者是否为
system
库(假定在任何地方都存在)。3.6 版本新增: 作为可选参数 (
IGNORE_ITEM
) 可以传递文件名列表,这些文件名将被忽略(例如IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe"
)
- verify_bundle_symlinks¶
verify_bundle_symlinks(<bundle> <result_var> <info_var>)
验证在
<bundle>
捆绑包中找到的任何符号链接是否指向也已在捆绑包中的其他文件... 任何指向外部文件的内容都会导致此函数验证失败。