检查类型大小

检查类型的大小

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

检查类型是否存在并确定其大小。结果在以下变量中报告:

有_<变量>

保存一个 true 或 false 值,指示该类型是否存在。

<变量>

持有以下值之一:

<尺寸>

类型具有非零大小 <size>

0

类型具有依赖于体系结构的大小。当 CMAKE_OSX_ARCHITECTURES 具有多个架构时,可能会发生这种情况。在这种情况下,<variable>_CODE 包含从每个架构宏到相应类型大小的 C 预处理器测试映射。架构宏列表存储在``<variable>_KEYS``中,每个键的值存储在``<variable>-<key>``中。

""(空字符串)

类型不存在。

<变量>_CODE

保留 C 预处理器代码以将宏“<variable>”定义为类型的大小,或者如果类型不存在则保留宏未定义。

选项是:

BUILTIN_TYPES_ONLY

仅支持编译器内置类型。如果*未*给出,宏将检查标题``<sys/types.h>``、<stdint.h> 和``<stddef.h>``,并将结果保存在`` HAVE_SYS_TYPES_H``、HAVE_STDINT_H 和``HAVE_STDDEF_H``。类型大小检查自动包含可用的标头,因此支持对标头中定义的类型进行检查。

语言<语言>

使用``<language>`` 编译器来执行检查。可接受的值为“C”和“CXX”。

不管宏的名称如何,您也可以使用它来检查更复杂的表达式的大小。检查例如对于结构成员的大小,您可以执行以下操作:

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

在调用此宏以修改检查运行方式之前,可以设置以下变量:

CMAKE_REQUIRED_FLAGS

编译命令行标志的字符串。

CMAKE_REQUIRED_DEFINITIONS

要定义的宏列表 (-DFOO=bar)。

CMAKE_REQUIRED_INCLUDES

包含目录列表。

CMAKE_REQUIRED_LINK_OPTIONS

在 3.14 版本加入: 传递给链接命令的选项列表。

CMAKE_REQUIRED_LIBRARIES

要链接的库列表。

CMAKE_REQUIRED_QUIET

在 3.1 版本加入: 在没有消息的情况下安静地执行。

CMAKE_EXTRA_INCLUDE_FILES

要包含的额外标题列表。