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_RECURSEglobbing 模式,是仅遍历匹配项还是递归遍历其子目录。
<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>变量将设置为以下值之一:systemlocalembeddedother
项目可以通过定义自定义的
gp_resolved_file_type_override()函数来覆盖此函数。
- gp_file_type¶
gp_file_type(<original-file> <file> <type-var>)
相对于
<original-file>确定<file>的类型。结果先决条件类型将存储在变量<type-var>中。<type-var>变量将设置为以下值之一:systemlocalembeddedother
示例¶
打印共享库的所有依赖项,包括系统库,并带详细输出。
include(GetPrerequisites)
list_prerequisites("path/to/libfoo.dylib" 1 0 1)