CheckTypeSize

檢查型別的大小

check_type_size
check_type_size(<type> <variable> [BUILTIN_TYPES_ONLY]
                                  [LANGUAGE <language>])

檢查型別是否存在並確定其大小。結果會回報在下列變數中

HAVE_<variable>

持有真值或假值,表示該型別是否存在。

<variable>

持有下列其中一個值

<size>

型別具有非零大小 <size>

0

型別具有與架構相關的大小。當 CMAKE_OSX_ARCHITECTURES 具有多個架構時,可能會發生這種情況。在這種情況下,<variable>_CODE 包含 C 前處理器測試,將每個架構巨集對應到對應的型別大小。架構巨集的清單儲存在 <variable>_KEYS 中,而每個索引鍵的值則儲存在 <variable>-<key> 中。

"" (空字串)

型別不存在。

<variable>_CODE

持有 C 前處理器程式碼,以將巨集 <variable> 定義為型別的大小,如果型別不存在,則保留巨集未定義。

選項如下

BUILTIN_TYPES_ONLY

僅支援編譯器內建的型別。如果給定,則巨集會檢查標頭 <sys/types.h><stdint.h><stddef.h>,並將結果儲存在 HAVE_SYS_TYPES_HHAVE_STDINT_HHAVE_STDDEF_H 中。型別大小檢查會自動包含可用的標頭,因此支援檢查在標頭中定義的型別。

LANGUAGE <language>

使用 <language> 編譯器執行檢查。可接受的值為 CCXX

儘管巨集的名稱如此,您也可以使用它來檢查更複雜的表達式的大小。例如,要檢查結構成員的大小,您可以執行如下操作

check_type_size("((struct something*)0)->member" SIZEOF_MEMBER)

在呼叫此巨集之前,可以設定下列變數來修改檢查的執行方式

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,則會抑制所有與檢查相關聯的狀態訊息。

CMAKE_EXTRA_INCLUDE_FILES

要包含的額外標頭清單。