CheckTypeSize

检查类型 sizeof

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

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

HAVE_<variable>

包含 true 或 false 值,指示类型是否存在。

<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

要传递给编译器的其他标记字符串。该字符串必须用空格分隔——;列表 不起作用。 在 CMAKE_REQUIRED_FLAGS 的内容之前会自动向编译器命令添加 CMAKE_<LANG>_FLAGS 及其相关配置特定变量的内容。

CMAKE_REQUIRED_DEFINITIONS

形式为 -DFOO-DFOO=bar 的编译器定义的 ;-list。还将自动添加 <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 版本中添加。

如果此变量计算为布尔真值,则将禁止与检查关联的所有状态消息。

CMAKE_EXTRA_INCLUDE_FILES

要包括的额外头文件列表。