CMake在配置步骤检查数据类型大小的目的是什么?



我正在尝试使用cmake构建BBS Studio项目。

对于配置和生成构建文件,我使用这个命令。
cmake -G "Visual Studio 16 2019" -A x64 -S . -B build64 -DDepsPath=C:UsersalokmDownloadsdependencies2019win64 -DQTDIR=C:Qt5.15.2msvc2019_64 -DVIRTUALCAM_GUID=e61ba6f1-ac3a-47b6-aaee-b537088061e4 -DCMAKE_CONFIGURATION_TYPES=Release

我正在检查的相关日志行是

C compiler: MSVC
-- Check size of __int64
-- Check size of __int64 - done
-- Check size of int64_t
-- Check size of int64_t - done
-- Check size of long long
-- Check size of long long - done
-- Check size of int32_t
-- Check size of int32_t - done
-- Check size of __int32
-- Check size of __int32 - done
-- Check size of long
-- Check size of long - done
-- Check size of int
-- Check size of int - done
-- Check size of unsigned long
-- Check size of unsigned long - done
-- Check size of unsigned int
-- Check size of unsigned int - done
-- Check size of unsigned short
-- Check size of unsigned short - done
-- Check size of uint32_t
-- Check size of uint32_t - done
-- Check size of __uint32
-- Check size of __uint32 - failed
-- Check size of uint16_t
-- Check size of uint16_t - done
-- Check size of __uint16
-- Check size of __uint16 - failed
-- Check size of uint8_t
-- Check size of uint8_t - done
-- Check size of __uint8
-- Check size of __uint8 - failed
-- Check size of ssize_t
-- Check size of ssize_t - failed
-- Check size of SSIZE_T
-- Check size of SSIZE_T - failed

在这个配置步骤中,这些关于检查数据类型大小的日志行是什么?这几行是什么意思?检查数据类型大小的目的是什么?

原因是代码可移植性。像int32_t这样的标准定宽整数类型不需要被所有编译器支持,仅从C99(和c++ 11)开始支持。

我们可以在这里看到,捆绑的jansson库需要特定宽度的整数类型来进行JSON解析。例如,对于32位整数,它会检查几种可能性—int32_t,__int32,long,int:

# Check our 32 bit integer sizes
check_type_size (int32_t INT32_T)
check_type_size (__int32 __INT32)
check_type_size ("long" LONG_INT)
check_type_size ("int" INT)
if (HAVE_INT32_T)
set (JSON_INT32 int32_t)
elseif (HAVE___INT32)
set (JSON_INT32 __int32)
elseif (HAVE_LONG_INT AND (${LONG_INT} EQUAL 4))
set (JSON_INT32 long)
elseif (HAVE_INT AND (${INT} EQUAL 4))
set (JSON_INT32 int)
else ()
message (FATAL_ERROR "Could not detect a valid 32-bit integer type")
endif ()

可以论证的是,如果一次执行一个检查,直到找到所需的类型(在大多数情况下,第一个选择就足够了),配置过程将会更快。

相关内容

  • 没有找到相关文章

最新更新