CheckSourceCompiles

新增於 3.19 版本。

檢查一次給定語言的原始碼是否可以建置。

check_source_compiles
check_source_compiles(<lang> <code> <resultVar>
                      [FAIL_REGEX <regex1> [<regex2>...]]
                      [SRC_EXT <extension>])

檢查一次在 <code> 中提供的原始碼是否可以使用程式語言 <lang> 建置。結果會儲存在由 <resultVar> 指定的內部快取變數中,成功時布林值為 true,失敗時布林值為 false

如果提供了 FAIL_REGEX,則失敗的判斷方式為檢查編譯器輸出中的任何內容是否與指定的任何正規表達式相符。

預設情況下,測試原始碼檔案將被賦予與請求的語言匹配的檔案擴展名。可以使用 SRC_EXT 選項以 .<extension> 取代此設定。

C 範例檢查編譯器是否支援 noreturn 屬性

set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")

check_source_compiles(C
"#if !__has_c_attribute(noreturn)
#error \"No noreturn attribute\"
#endif"
HAVE_NORETURN)

Fortran 範例檢查編譯器是否支援 pure 程序屬性

set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")

check_source_compiles(Fortran
"pure subroutine foo()
end subroutine"
HAVE_PURE)

在內部,使用 try_compile() 來編譯原始碼。如果 CMAKE_TRY_COMPILE_TARGET_TYPE 設定為 EXECUTABLE (預設),則原始碼將編譯並連結為可執行程式。如果設定為 STATIC_LIBRARY,則原始碼會被編譯但不會被連結。在任何情況下,所有函式都必須像往常一樣宣告。

另請參閱 check_source_runs() 以執行編譯後的原始碼。

編譯和連結指令可以透過在呼叫 check_source_compiles() 之前設定以下任何變數來影響

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 版本。

如果此變數的計算結果為布林值 true,則與檢查相關的所有狀態訊息都將被抑制。