CheckSymbolExists¶
提供一個巨集來檢查符號是否存在於 C
語言中,作為函式、變數或巨集。
- check_symbol_exists¶
check_symbol_exists(<symbol> <files> <variable>)
檢查在包含給定的標頭檔
<files>
後,<symbol>
是否可用,並將結果儲存在<variable>
中。以分號分隔列表的形式在一個參數中指定檔案列表。<variable>
將被建立為一個內部快取變數。
如果標頭檔將符號定義為巨集,則視為可用並假定可以運作。如果標頭檔將符號宣告為函式或變數,則該符號也必須可用於連結(因此可能無法偵測到內建函數)。如果符號是類型、列舉值或內建函數,則將無法識別(請考慮使用 CheckTypeSize
或 CheckSourceCompiles
)。如果需要在 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)