CheckLibraryExists¶
檢查系統或指定函式庫中是否存在該函式一次。
- check_library_exists¶
check_library_exists(<library> <function> <location> <variable>)
檢查函式庫
<library>
是否存在於給定的位置<location>
,並具有指定的<function>
。 結果儲存在內部快取變數<variable>
中。 如果<location>
是空字串,則會搜尋預設目錄。
建議使用 CheckSymbolExists
或 CheckSourceCompiles
模組,而不是此模組,以更穩健地偵測函式庫中是否有可用的函式。
以下變數可以在呼叫此巨集之前設定,以修改檢查的執行方式
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()