在clang++预处理器中确定gcc工具链版本
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
。因此,我不想检查__clang_major__
,而是想检查预处理器中的gcc-libstdc++版本。
在这个编译器资源管理器示例中,__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++版本的方法,这样,如果先检查编译器,我就不必写意大利面条了。
在gcc9的编译器头中为^#.*define.*9
进行Grepping似乎
#include <bits/c++config.h>
#if _GLIBCXX_RELEASE > 8
# include <execution>
#endif
能胜任这份工作。从这个一致性视图来看,这个变量是在gcc7的工具链中引入的。
相关文章:
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 奇怪的结构&GCC&clang(void*返回类型)
- GCC本机矩阵运算库
- PowerPC ppc64le上的Gcc Woverloaded虚拟错误
- gcc和c++17的过载解析失败
- 在clang++预处理器中确定gcc工具链版本
- 使用交叉工具ng编译gcc时出错
- macos GCC 工具链编译简单 hello 世界的问题
- 使用GCC,优于工具链中的标头SYSROOT标头
- 我已安装的GCC版本是我已安装的RedHat开发人员工具集的背后
- 如何在 CLANG 中选择特定的 GCC 工具链
- GCC消耗太多内存!!图形工具
- 尝试使用 gcc 工具链构建 Boost
- 使用GCC/CLANG跟踪代码膨胀的工具
- 是否有工具可以将Visual Studio对象文件转换为GCC格式?
- LLVM的GCC工具链
- NDK12b: clang和gcc使用独立的工具链和相同的构建脚本生成不同的ELF
- 无法使用 GCC 5.1 工具链编译 C++11 源代码
- 是否有一个开源的免费工具为MS Visual c++ Express构建使用gcc
- 为什么这段代码导致SIGSEGV (gcc编译器,cygwin下的Android NDK工具链)