GetPrerequisites¶
已弃用,版本 3.16: 请使用 file(GET_RUNTIME_DEPENDENCIES)
代替。
此模块提供函数来分析和列出可执行文件或共享库文件的依赖项(先决条件)。这些函数列出可执行文件或共享库所需的共享库(.dll
、.dylib
或 .so
文件)。
它使用以下特定于平台的工具来确定依赖项:
dumpbin
(Windows)objdump
(Windows 上的 MinGW)ldd
(Linux/Unix)otool
(Apple 操作系统)
已更改,版本 3.16: 如果设置了 CMAKE_OBJDUMP
变量,将使用该变量指定的工具。
此模块提供的函数如下:
gp_item_default_embedded_path()
(项目可以通过定义gp_item_default_embedded_path_override()
来覆盖它)gp_resolve_item()
(项目可以通过定义gp_resolve_item_override()
来覆盖它)gp_resolved_file_type()
(项目可以通过定义gp_resolved_file_type_override()
来覆盖它)
函数¶
- get_prerequisites¶
get_prerequisites(<target> <prerequisites-var> <exclude-system> <recurse> <exepath> <dirs> [<rpaths>])
获取
<target>
所需的共享库文件列表。变量<prerequisites-var>
在首次调用此函数时应为空。退出时,<prerequisites-var>
将包含所需的共享库文件列表。参数为
<target>
可执行文件或共享库文件的完整路径。
<prerequisites-var>
用于包含结果的 CMake 变量名。
<exclude-system>
如果设置为 1,将排除系统先决条件;如果设置为 0,则包含它们。
<recurse>
如果设置为 1,将递归查找所有先决条件;如果设置为 0,则仅列出直接先决条件。
<exepath>
用于在 Apple 操作系统上替换
@executable_path
的顶级可执行文件的路径。<dirs>
可能找到库的路径列表:当给出没有路径信息的 target 时,将首先搜索这些路径。然后也会搜索标准系统位置:PATH、Framework 位置、/usr/lib...
<rpaths>
可执行文件或库的可选运行时搜索路径,用于帮助查找文件。
新增于版本 3.14: 在调用此函数之前,可以将变量
GET_PREREQUISITES_VERBOSE
设置为 true,以启用详细输出。
- list_prerequisites¶
list_prerequisites(<target> [<recurse> [<exclude-system> [<verbose>]]])
打印一条消息,列出
<target>
的先决条件。参数为
<target>
共享库或可执行 target 的名称,或共享库或可执行文件的完整路径。
<recurse>
如果设置为 1,将递归查找所有先决条件;如果设置为 0,则仅列出直接先决条件。
<exclude-system>
如果设置为 1,将排除系统先决条件;如果设置为 0,则包含它们。
<verbose>
如果设置为 0,则只打印先决文件的完整路径名。如果设置为 1,将显示额外信息。
- list_prerequisites_by_glob¶
list_prerequisites_by_glob(<GLOB|GLOB_RECURSE> <glob-exp> [<optional-args>...])
打印匹配 globbing 模式的共享库和可执行文件的先决条件。
参数为
GLOB
或GLOB_RECURSE
globbing 模式,是仅遍历匹配项还是递归遍历其子目录。
<glob-exp>
一个 globbing 表达式,与
file(GLOB)
或file(GLOB_RECURSE)
一起使用,以检索匹配文件的列表。如果匹配的文件是可执行的,则会列出其先决条件。<optional-args>...
提供的任何额外(可选)参数都会作为可选参数传递给
list_prerequisite()
调用。
- gp_append_unique¶
gp_append_unique(<list-var> <value>)
仅当
<value>
不在列表<list-var>
中时,才将其追加到列表变量。
- is_file_executable¶
is_file_executable(<file> <result-var>)
如果
<file>
是二进制可执行文件,则将<result-var>
设置为 1;否则将其设置为 0。
- gp_item_default_embedded_path¶
gp_item_default_embedded_path(<item> <default-embedded-path-var>)
确定
<item>
嵌入在 bundle 中时的引用路径,并将其存储到变量<default-embedded-path-var>
中。项目可以通过定义自定义的
gp_item_default_embedded_path_override()
函数来覆盖此函数。
- gp_resolve_item¶
gp_resolve_item(<context> <item> <exepath> <dirs> <resolved-item-var> [<rpaths>])
将给定的
<item>
解析为现有的完整路径文件,并将其存储到变量<resolved-item-var>
中。参数为
<context>
用于在 Apple 操作系统上替换
@loader_path
的顶级加载路径。在解析 item 时,@loader_path
引用将相对于给定 context 值(可能是另一个库)的目录进行解析。<item>
要解析的 item。
<exepath>
请参阅
get_prerequisites()
中的参数说明。<dirs>
请参阅
get_prerequisites()
中的参数说明。<resolved-item-var>
将解析后的 item 存储到的结果变量。
<rpaths>
请参阅
get_prerequisites()
中的参数说明。
项目可以通过定义自定义的
gp_resolve_item_override()
函数来覆盖此函数。
- gp_resolved_file_type¶
gp_resolved_file_type(<original-file> <file> <exepath> <dirs> <type-var> [<rpaths>])
相对于
<original-file>
确定<file>
的类型。结果先决条件类型将存储在变量<type-var>
中。如果需要,请使用
<exepath>
和<dirs>
来解析非绝对<file>
值 -- 但仅限于非嵌入式 item。<rpaths>
请参阅
get_prerequisites()
中的参数说明。
<type-var>
变量将设置为以下值之一:system
local
embedded
other
项目可以通过定义自定义的
gp_resolved_file_type_override()
函数来覆盖此函数。
- gp_file_type¶
gp_file_type(<original-file> <file> <type-var>)
相对于
<original-file>
确定<file>
的类型。结果先决条件类型将存储在变量<type-var>
中。<type-var>
变量将设置为以下值之一:system
local
embedded
other
示例¶
打印共享库的所有依赖项,包括系统库,并带详细输出。
include(GetPrerequisites)
list_prerequisites("path/to/libfoo.dylib" 1 0 1)