繁体   English   中英

在 clang++ 预处理器中确定 gcc-toolchain 版本

[英]Determine gcc-toolchain version in clang++ preprocessor

根据cppreference ,gcc libstdc++ 支持并行性 TS。 用外行的术语和与我相关的内容来说,这意味着#include <execution>在 g++ 9 中有效,而在 g++ 8 或更早版本中无效。 在我的源代码中,我可以处理这个

#if ( defined( __GNUC__ ) && __GNUC__ > 8 )
#  define can_use_std_execution
#  include <execution>
#endif

对于我的 clang++ 构建, <execution>的可用性取决于我使用的--gcc-toolchain 因此,我想检查预处理器中的 gcc libstdc++ 版本,而不是检查__clang_major__

就我在这个编译器-资源管理器示例中看到的而言, __GNUC__是在 clang 中定义的,但编译命令是

-g -o /tmp/compiler-explorer-compiler120120-1672-4ffux6.smufm/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-8.3.0 -fcolor-diagnostics -fno-crash-diagnostics /tmp/compiler-explorer-compiler120120-1672-4ffux6.smufm/example.cpp

即 gcc 工具链来自 gcc 8.3.0,但__GNUC__值为 4。

使用 clang 在预处理器中查询 gcc 工具链版本的好方法是什么? 理想情况下,一种以与 g++ 和 clang++ 兼容的方式检查 libstdc++ 版本的方法,这样如果首先检查编译器,我就不必编写意大利面。

在 gcc 9 的编译器头文件中查找^#.*define.*9似乎是

#include <bits/c++config.h>
#if _GLIBCXX_RELEASE > 8
#  include <execution>
#endif

可以胜任。 这个一致性的角度来看,这个变量是在 gcc 7 的工具链中引入的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM