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