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>編譯器來執行檢查。可接受的值為C和CXX。如果未指定此選項,則在啟用 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 選項來指定要使用的編譯器。例如,當專案中同時啟用了 C 和 CXX 語言時,檢查多個 C++ 標頭檔:
include(CheckIncludeFiles)
check_include_files("header_1.hpp;header_2.hpp" HAVE_HEADERS LANGUAGE CXX)
另請參見¶
CheckIncludeFile模組用於檢查單個 C 標頭檔。CheckIncludeFileCXX模組用於檢查單個 C++ 標頭檔。