CheckSymbolExists

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

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

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

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

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

CMAKE_REQUIRED_FLAGS

要傳遞給編譯器的其他旗標字串。字串必須以空格分隔--;-列表 將不起作用。CMAKE_<LANG>_FLAGS 及其相關的特定配置變數的內容會自動加入到編譯器命令中,然後加入 CMAKE_REQUIRED_FLAGS 的內容。

CMAKE_REQUIRED_DEFINITIONS

格式為 -DFOO-DFOO=bar 的編譯器定義的 ;-列表。還會自動加入 <resultVar> 指定的名稱的定義。

CMAKE_REQUIRED_INCLUDES

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

CMAKE_REQUIRED_LINK_OPTIONS

在 3.14 版本中新增。

要加入到連結命令的選項的 ;-列表(有關詳細資訊,請參閱 try_compile())。

CMAKE_REQUIRED_LIBRARIES

要加入到連結命令的程式庫的 ;-列表。這些可以是系統程式庫的名稱,也可以是 匯入目標(有關詳細資訊,請參閱 try_compile())。

CMAKE_REQUIRED_LINK_DIRECTORIES

在 3.31 版本中新增。

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

CMAKE_REQUIRED_QUIET

在 3.1 版本中新增。

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

例如

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)