首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在clang++预处理器中确定gcc-工具链版本

在clang++预处理器中确定gcc-工具链版本
EN

Stack Overflow用户
提问于 2020-02-20 11:10:39
回答 1查看 180关注 0票数 1

根据优先选择的说法,gcc libstdc++支持并行TS。从外行人的角度来看,对于我来说,这意味着#include <execution>在g++ 9中工作,而在g++ 8或以前不工作。在我的源代码中,我可以用

代码语言:javascript
复制
#if ( defined( __GNUC__ ) && __GNUC__ > 8 )
#  define can_use_std_execution
#  include <execution>
#endif

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

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

代码语言:javascript
复制
-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工具链版本的好方法是什么?理想情况下,检查libstdc++版本的方式与g++和clang++兼容,这样如果首先检查编译器,我就不会编写意大利面。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-20 11:36:09

在gcc 9的编译器头中加入^#.*define.*9似乎是

代码语言:javascript
复制
#include <bits/c++config.h>
#if _GLIBCXX_RELEASE > 8
#  include <execution>
#endif

能做好这份工作。在这个一致性视图中,这个变量是用gcc 7的工具链引入的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60318611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档