获取先决条件

自 3.16 版本弃用: 使用 file(GET_RUNTIME_DEPENDENCIES) 代替。

分析和列出可执行文件先决条件的功能。

此模块提供列出可执行文件或共享库文件所依赖的 .dll、.dylib 或 .so 文件的功能。 (它的先决条件。)

它使用各种工具来获取所需共享库文件的列表:

dumpbin (Windows)
objdump (MinGW on Windows)
ldd (Linux/Unix)
otool (Mac OSX)

在 3.16 版本发生变更: 如果已设置,将使用 CMAKE_OBJDUMP 指定的工具。

该模块提供以下功能:

get_prerequisites
list_prerequisites
list_prerequisites_by_glob
gp_append_unique
is_file_executable
gp_item_default_embedded_path
  (projects can override with gp_item_default_embedded_path_override)
gp_resolve_item
  (projects can override with gp_resolve_item_override)
gp_resolved_file_type
  (projects can override with gp_resolved_file_type_override)
gp_file_type
GET_PREREQUISITES(<target> <prerequisites_var> <exclude_system> <recurse>
                  <exepath> <dirs> [<rpaths>])

获取 <target> 所需的共享库文件列表。名为 <prerequisites_var> 的变量中的列表在首次进入此函数时应为空。退出时,<prerequisites_var> 将包含所需共享库文件的列表。

<target> 是可执行文件的完整路径。 <prerequisites_var> 是包含结果的 CMake 变量的名称。 <exclude_system> 必须为 0 或 1,指示是包含还是排除“系统”先决条件。如果 <recurse> 设置为 1,将递归查找所有先决条件,如果设置为 0,则仅列出直接先决条件。 <exepath> 是用于在 Mac 上替换 @executable_path 的顶级可执行文件的路径。 <dirs> 是可能找到库的路径列表:当给出没有任何路径信息的目标时,首先搜索这些路径。然后还会搜索标准系统位置:PATH、Framework 位置、/usr/lib...

在 3.14 版本加入: 可以将变量 GET_PREREQUISITES_VERBOSE 设置为 true 以启用详细输出。

LIST_PREREQUISITES(<target> [<recurse> [<exclude_system> [<verbose>]]])

打印一条消息,列出 <target> 的先决条件。

<target> 是共享库或可执行目标的名称或共享库或可执行文件的完整路径。如果 <recurse> 设置为 1,将递归查找所有先决条件,如果设置为 0,则仅列出直接先决条件。 <exclude_system> 必须为 0 或 1,指示是包含还是排除“系统”先决条件。当 <verbose> 设置为 0 时,仅打印先决条件的完整路径名,设置为 1 时将显示额外信息。

LIST_PREREQUISITES_BY_GLOB(<glob_arg> <glob_exp>)

打印与 globbing 模式匹配的共享库和可执行文件的先决条件。 <glob_arg> 是 GLOB 或 GLOB_RECURSE,<glob_exp> 是与“file(GLOB”或“file(GLOB_RECURSE”) 一起使用的通配表达式,用于检索匹配文件列表。如果匹配文件是可执行的,则列出其先决条件。

提供的任何附加(可选)参数都作为可选参数传递给 list_prerequisites 调用。

GP_APPEND_UNIQUE(<list_var> <value>)

仅当值不在列表中时,才将 <value> 附加到列表变量 <list_var>。

IS_FILE_EXECUTABLE(<file> <result_var>)

如果 <file> 是二进制可执行文件,则在 <result_var> 中返回 1,否则返回 0。

GP_ITEM_DEFAULT_EMBEDDED_PATH(<item> <default_embedded_path_var>)

当项目嵌入包中时,返回其他人应该引用该项目的路径。

通过提供特定于项目的 gp_item_default_embedded_pa​​th_override 函数在每个项目的基础上覆盖。

GP_RESOLVE_ITEM(<context> <item> <exepath> <dirs> <resolved_item_var>
                [<rpaths>])

将项目解析为现有的完整路径文件。

通过提供特定于项目的 gp_resolve_item_override 函数在每个项目的基础上进行覆盖。

GP_RESOLVED_FILE_TYPE(<original_file> <file> <exepath> <dirs> <type_var>
                      [<rpaths>])

返回关于 <original_file> 的 <file> 的类型。描述先决条件类型的字符串在名为 <type_var> 的变量中返回。

如有必要,使用 <exepath> 和 <dirs> 来解析非绝对 <file> 值——但仅适用于非嵌入项。

可能的类型是:

system
local
embedded
other

通过提供特定于项目的 gp_resolved_file_type_override 函数在每个项目的基础上进行覆盖。

GP_FILE_TYPE(<original_file> <file> <type_var>)

返回关于 <original_file> 的 <file> 的类型。描述先决条件类型的字符串在名为 <type_var> 的变量中返回。

可能的类型是:

system
local
embedded
other