GetPrerequisites

已弃用,版本 3.16: 请使用 file(GET_RUNTIME_DEPENDENCIES) 代替。

此模块提供函数来分析和列出可执行文件或共享库文件的依赖项(先决条件)。这些函数列出可执行文件或共享库所需的共享库(.dll.dylib.so 文件)。

它使用以下特定于平台的工具来确定依赖项:

  • dumpbin (Windows)

  • objdump (Windows 上的 MinGW)

  • ldd (Linux/Unix)

  • otool (Apple 操作系统)

已更改,版本 3.16: 如果设置了 CMAKE_OBJDUMP 变量,将使用该变量指定的工具。

此模块提供的函数如下:

函数

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 模式的共享库和可执行文件的先决条件。

参数为

GLOBGLOB_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)