GetPrerequisites

已於 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" 一起使用的 globbing 表達式,以檢索符合檔案的列表。 如果符合的檔案是可執行檔,則會列出其先決條件。

任何提供的額外(可選)參數都會作為 list_prerequisites 呼叫的可選參數傳遞。

GP_APPEND_UNIQUE(<list_var> <value>)

僅當 <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>)

傳回當項目嵌入到 bundle 內部時,其他人應參照該項目的路徑。

透過提供專案特定的 gp_item_default_embedded_path_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>])

傳回 <file> 相對於 <original_file> 的類型。 描述先決條件類型的字串會傳回在名為 <type_var> 的變數中。

如有必要,請使用 <exepath> 和 <dirs> 來解析非絕對 <file> 值 -- 但僅適用於非嵌入式項目。

可能的類型為

system
local
embedded
other

透過提供專案特定的 gp_resolved_file_type_override 函式,在每個專案的基礎上覆寫。

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

傳回 <file> 相對於 <original_file> 的類型。 描述先決條件類型的字串會傳回在名為 <type_var> 的變數中。

可能的類型為

system
local
embedded
other