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_H
、HAVE_STDINT_H
和HAVE_STDDEF_H
中。类型大小检查会自动包含可用的头文件,因此支持检查头文件中定义的类型。LANGUAGE <language>
使用
<language>
编译器执行检查。可接受的值为C
和CXX
。
尽管该宏有其名称,但也可以使用它来检查更复杂表达式的长度。例如,若要检查结构成员的长度,可以执行类似以下操作
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
要包括的额外头文件列表。