由于不同的编译器对 C++ 标准的支持力度都是不同的,有些编译器可能并不支持 C++ 的一些高版本标准中的特性,这时我们就可以通过 xmake 提供的编译器特性检测接口去检测它们。
这里以 C++11 的 constexpr 为例,在编译代码时,检测判断是否支持 constexpr,如果不支持,我们就不使用这个关键字。
为了简化实验步骤,这里重新修改 xmake.lua 配置,去掉对 config.h 的使用,直接通过 check_features
接口去完成 C++ 特性的检测,例如。
includes("check_features.lua")
target("check")
set_kind("binary")
add_files("src/*.cpp")
check_features("HAS_CONSTEXPR", "cxx_constexpr")
其中 cxx_constexpr
就是指 C++ 的 constexpr 特性名称,关于完整的 C++ 特性名称列表,我们可以到 C++ 特性列表名称 查看。
然后修改 src/main.cpp
中的代码,改成如下对 constexpr 的使用。
#ifdef HAS_CONSTEXPR
constex