CheckLibraryExists

檢查系統或指定函式庫中是否存在該函式一次。

check_library_exists
check_library_exists(<library> <function> <location> <variable>)

檢查函式庫 <library> 是否存在於給定的位置 <location>,並具有指定的 <function>。 結果儲存在內部快取變數 <variable> 中。 如果 <location> 是空字串,則會搜尋預設目錄。

建議使用 CheckSymbolExistsCheckSourceCompiles 模組,而不是此模組,以更穩健地偵測函式庫中是否有可用的函式。

以下變數可以在呼叫此巨集之前設定,以修改檢查的執行方式

CMAKE_REQUIRED_FLAGS

要傳遞給編譯器的額外旗標字串。 字串必須以空格分隔——;-list 無效。 CMAKE_<LANG>_FLAGS 的內容及其相關的特定於配置的變數,會自動添加到編譯器命令中,在 CMAKE_REQUIRED_FLAGS 的內容之前。

CMAKE_REQUIRED_DEFINITIONS

編譯器定義的 ;-list,格式為 -DFOO-DFOO=bar。 也會自動添加由 <resultVar> 指定的名稱的定義。

CMAKE_REQUIRED_LINK_OPTIONS

在版本 3.14 中新增。

要添加到連結命令的選項 ;-list (有關更多詳細資訊,請參閱 try_compile())。

CMAKE_REQUIRED_LIBRARIES

要添加到連結命令的函式庫 ;-list。 這些可以是系統函式庫的名稱,也可以是 Imported Targets (有關更多詳細資訊,請參閱 try_compile())。

CMAKE_REQUIRED_LINK_DIRECTORIES

在版本 3.31 中新增。

要傳遞給連結器的函式庫搜尋路徑 ;-list (有關更多詳細資訊,請參閱 try_compile())。

CMAKE_REQUIRED_QUIET

在版本 3.1 中新增。

如果此變數評估為布林值 true,則與檢查相關的所有狀態訊息都將被抑制。

範例

此模組可用於執行所謂的健全性檢查,以驗證指定的函式庫是否提供預期的功能,並且確實是正在定位的正確函式庫。

例如,檢查 curl 函式庫是否存在於預設路徑中,並具有 curl_easy_perform 函式

include(CheckLibraryExists)
check_library_exists(curl curl_easy_perform "" HAVE_LIBRARY_CURL)

檢查函式庫是否存在於特定的非標準位置,並具有指定的函式

include(CheckLibraryExists)
check_library_exists(curl curl_easy_perform "/opt/curl/lib" HAVE_LIBRARY_CURL)

也可以使用 IMPORTED library (例如,從 find_package() 呼叫)

find_package(CURL)

# ...

if(TARGET CURL::libcurl)
  include(CheckLibraryExists)
  check_library_exists(CURL::libcurl curl_easy_perform "" HAVE_LIBRARY_CURL)
endif()