CheckSymbolExists

提供一個巨集來檢查符號是否存在於 C 語言中,作為函式、變數或巨集。

check_symbol_exists
check_symbol_exists(<symbol> <files> <variable>)

檢查在包含給定的標頭檔 <files> 後,<symbol> 是否可用,並將結果儲存在 <variable> 中。以分號分隔列表的形式在一個參數中指定檔案列表。<variable> 將被建立為一個內部快取變數。

如果標頭檔將符號定義為巨集,則視為可用並假定可以運作。如果標頭檔將符號宣告為函式或變數,則該符號也必須可用於連結(因此可能無法偵測到內建函數)。如果符號是類型、列舉值或內建函數,則將無法識別(請考慮使用 CheckTypeSizeCheckSourceCompiles)。如果需要在 C++ 中進行檢查,請考慮改用 CheckCXXSymbolExists

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

CMAKE_REQUIRED_FLAGS

要傳遞給編譯器的額外旗標字串。該字串必須以空格分隔——;-list 將不起作用。CMAKE_<LANG>_FLAGS 及其相關的組態特定變數的內容會自動添加到編譯器命令中,然後才是 CMAKE_REQUIRED_FLAGS 的內容。

CMAKE_REQUIRED_DEFINITIONS

一個 ;-list 形式為 -DFOO-DFOO=bar 的編譯器定義。也將自動添加由 <resultVar> 指定名稱的定義。

CMAKE_REQUIRED_INCLUDES

一個 ;-list 要傳遞給編譯器的標頭搜尋路徑。這些將是唯一使用的標頭搜尋路徑——INCLUDE_DIRECTORIES 目錄屬性的內容將被忽略。

CMAKE_REQUIRED_LINK_OPTIONS

在版本 3.14 中新增。

一個 ;-list 要添加到連結命令的選項(請參閱 try_compile() 以取得更多詳細資訊)。

CMAKE_REQUIRED_LIBRARIES

一個 ;-list 要添加到連結命令的函式庫。這些可以是系統函式庫的名稱,也可以是 匯入目標(請參閱 try_compile() 以取得更多詳細資訊)。

CMAKE_REQUIRED_LINK_DIRECTORIES

在版本 3.31 中新增。

一個 ;-list 要傳遞給連結器的函式庫搜尋路徑(請參閱 try_compile() 以取得更多詳細資訊)。

CMAKE_REQUIRED_QUIET

在版本 3.1 中新增。

如果此變數的布林值為真,則將會抑制與檢查相關的所有狀態訊息。

例如

include(CheckSymbolExists)

# Check for macro SEEK_SET
check_symbol_exists(SEEK_SET "stdio.h" HAVE_SEEK_SET)
# Check for function fopen
check_symbol_exists(fopen "stdio.h" HAVE_FOPEN)