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_H
、HAVE_STDINT_H
和HAVE_STDDEF_H
中。型別大小檢查會自動包含可用的標頭,因此支援檢查在標頭中定義的型別。LANGUAGE <language>
使用
<language>
編譯器執行檢查。可接受的值為C
和CXX
。
儘管巨集的名稱如此,您也可以使用它來檢查更複雜的表達式的大小。例如,要檢查結構成員的大小,您可以執行如下操作
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
要包含的額外標頭清單。