我正在尝试在我的嵌入式 STM32 Keil 项目中使用 gsl。我的 Keil 项目最多使用过时的 semi c++11 编译器。(这是我的 ST 库为 LoRaWAN 设置的约束)。我正在使用 keil 捆绑的 V5.06 update 6 (build 750) ARM Compiler。Keil 选择不实施std::aray
STL。我对此感到非常失望,但是我能做些什么。
我选择使用gsl-Lite。它应该是兼容的C++98
。C++03
所以std::array
不需要,但是当我尝试使用包含在我的包含路径中的库来编译我的代码时,我收到了这个构建消息:
..\Core\inc\gsl/gsl-lite.hpp(405): error: #5: cannot open source input file "array": No such file or directory
# include <array>
但是第 404 行以这段代码开头:
#if gsl_HAVE( ARRAY )
# include <array>
#endif
在我看来,他们正在尝试确定是否<array>
可以包括在内。我的编辑器将此块变灰,就好像它没有被定义一样。
gsl_HAVE
定义为:
#define gsl_HAVE( feature ) ( gsl_HAVE_##feature )
我不明白这是如何工作的,以及如何检查是否ARRAY
未正确定义。
我不想不包含<array>
,所以我的代码可以构建和使用 gsl-lite。我的首选选项是带有定义的东西。
更新
据我了解包含系统:
#define gsl_HAVE_ARRAY gsl_CPP11_110
被定义为自动排除一个特征(gsl_HAVE_ARRAY
在这种情况下),当
#define gsl_CPP11_OR_GREATER ( gsl_CPLUSPLUS >= 201103L )
被评估为真实。gsl_CPLUSPLUS
定义为
# define gsl_CPLUSPLUS __cplusplus
但我似乎无法弄清楚__cplusplus
.