GetPrerequisites¶
已弃用,自版本 3.16 起: 请改用 file(GET_RUNTIME_DEPENDENCIES)。
此模块提供用于分析和列出可执行文件或共享库文件依赖项(先决条件)的命令。这些命令列出可执行文件或共享库所需的共享库(.dll、.dylib 或 .so 文件)。
使用 CMake 加载此模块
include(GetPrerequisites)
此模块使用以下特定于平台的工具确定依赖项:
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>])
传递给此命令的
<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>共享库或可执行目标名称,或共享库或可执行文件的完整路径。
<recurse>如果设置为 1,则递归查找所有先决条件;如果设置为 0,则仅列出直接先决条件。
<exclude-system>如果设置为 1,则排除系统先决条件;如果设置为 0,则包含它们。
<verbose>如果设置为 0,则仅打印先决文件的完整路径名。如果设置为 1,则显示额外信息。
- list_prerequisites_by_glob¶
打印匹配 globbing 模式的共享库和可执行文件的先决条件
list_prerequisites_by_glob(<GLOB|GLOB_RECURSE> <glob-exp> [<optional-args>...])
参数为
GLOB或GLOB_RECURSEglobbing 模式,是仅遍历匹配项还是递归遍历其子目录。
<glob-exp>与
file(GLOB)或file(GLOB_RECURSE)一起使用的 globbing 表达式,用于检索匹配文件列表。如果匹配的文件是可执行文件,则会列出其先决条件。<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>嵌入包内时的引用路径,并将其存储到变量<default-embedded-path-var>中。项目可以通过定义自定义
gp_item_default_embedded_path_override()命令来覆盖此命令。
- gp_resolve_item¶
将给定项解析为现有完整路径文件,并将其存储到变量中
gp_resolve_item(<context> <item> <exepath> <dirs> <resolved-item-var> [<rpaths>])
参数为
<context>顶级加载路径,用于在 Apple 操作系统上进行
@loader_path替换。解析项时,@loader_path引用将相对于给定上下文值(可能是另一个库)的目录进行解析。<item>要解析的项。
<exepath>请参阅
get_prerequisites()中的参数说明。<dirs>请参阅
get_prerequisites()中的参数说明。<resolved-item-var>将解析后的项存储到的结果变量。
<rpaths>请参阅
get_prerequisites()中的参数说明。
项目可以通过定义自定义
gp_resolve_item_override()命令来覆盖此命令。
- gp_resolved_file_type¶
确定给定文件的类型
gp_resolved_file_type(<original-file> <file> <exepath> <dirs> <type-var> [<rpaths>])
此命令确定
<file>相对于<original-file>的类型。先决条件的结果类型存储在<type-var>变量中。如有必要,请使用
<exepath>和<dirs>来解析非绝对<file>值——但仅限于非嵌入式项。<rpaths>请参阅
get_prerequisites()中的参数说明。
<type-var>变量将设置为以下值之一:systemlocalembeddedother
项目可以通过定义自定义
gp_resolved_file_type_override()命令来覆盖此命令。
- gp_file_type¶
确定给定文件的类型
gp_file_type(<original-file> <file> <type-var>)
此命令确定
<file>相对于<original-file>的类型。先决条件的结果类型存储在<type-var>变量中。<type-var>变量将设置为以下值之一:systemlocalembeddedother
示例¶
示例:基本用法¶
打印共享库的所有依赖项,包括系统库,并带有详细输出
include(GetPrerequisites)
list_prerequisites("path/to/libfoo.dylib" 1 0 1)
示例:升级代码¶
例如
include(GetPrerequisites)
# ...
gp_append_unique(keys "${key}")
新的代码中的 gp_append_unique() 可以替换为
if(NOT key IN_LIST keys)
list(APPEND keys "${key}")
endif()