CheckIncludeFiles

此模組提供了一個用於檢查一個或多個 C/C++ 標頭檔的命令。

在 CMake 專案中使用以下命令載入該模組:

include(CheckIncludeFiles)

命令

此模組提供了以下命令:

check_include_files

檢查一個或多個標頭檔是否存在且可以在 C 或 C++ 程式碼中一起被包含:

check_include_files(<includes> <variable> [LANGUAGE <language>])

其引數為:

<includes>

要檢查的標頭檔的 分號分隔列表

<variable>

用於儲存檢查結果的變數名稱。此變數將被建立為內部快取變數。

LANGUAGE <language>

在 3.11 版被加入.

如果設定,將使用指定的 <language> 編譯器來執行檢查。可接受的值為 CCXX。如果未指定此選項,則在啟用 C 編譯器的情況下使用 C 編譯器。如果未啟用 C 編譯器,則在啟用 C++ 編譯器的情況下使用 C++ 編譯器。

影響檢查的變數

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

CMAKE_REQUIRED_FLAGS

一個以空格分隔的字串,包含要傳遞給編譯器的額外旗標。分號分隔列表將無法運作。CMAKE_<LANG>_FLAGS 及其關聯的特定組態 CMAKE_<LANG>_FLAGS_<CONFIG> 變數的內容會在該變數的內容之前自動預置到編譯器命令中。

CMAKE_REQUIRED_DEFINITIONS

一個編譯器定義的分號分隔列表,每個定義的形式為 -DFOO-DFOO=bar。由檢查命令的結果變數引數所指定的名稱的定義也會自動新增。

CMAKE_REQUIRED_INCLUDES

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

CMAKE_REQUIRED_LINK_OPTIONS

在 3.14 版被加入.

一個要新增到連結命令的選項的分號分隔列表(詳情請參見 try_compile())。

CMAKE_REQUIRED_LIBRARIES

一個要新增到連結命令的程式庫的分號分隔列表。這些可以是系統程式庫的名稱,也可以是 Imported Targets`(詳情請參見 :command:`try_compile)。

CMAKE_REQUIRED_LINK_DIRECTORIES

在 3.31 版被加入.

一個要傳遞給連結器的程式庫搜尋路徑的分號分隔列表(詳情請參見 try_compile())。

CMAKE_REQUIRED_QUIET

在 3.1 版被加入.

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

在 3.12 版被加入: CMAKE_REQUIRED_LIBRARIES 變數,如果方針 CMP0075 設定為 NEW

範例

檢查一個或多個 C 標頭檔並將檢查結果儲存在快取變數中:

include(CheckIncludeFiles)

check_include_files(sys/socket.h HAVE_SYS_SOCKET_H)

if(HAVE_SYS_SOCKET_H)
  # The <net/if.h> header on Darwin and BSD-like systems is not self-contained
  # and also requires <sys/socket.h>
  check_include_files("sys/socket.h;net/if.h" HAVE_NET_IF_H)
else()
  check_include_files(net/if.h HAVE_NET_IF_H)
endif()

可以使用 LANGUAGE 選項來指定要使用的編譯器。例如,當專案中同時啟用了 CCXX 語言時,檢查多個 C++ 標頭檔:

include(CheckIncludeFiles)

check_include_files("header_1.hpp;header_2.hpp" HAVE_HEADERS LANGUAGE CXX)

另請參見