Clang,在源代码端检测 -mavx 编译器参数

Posted

技术标签:

【中文标题】Clang,在源代码端检测 -mavx 编译器参数【英文标题】:Clang, detecting -mavx compiler argument on the source code side 【发布时间】:2014-02-09 15:07:50 【问题描述】:

当我使用 GCC 并设置命令行参数 -mavx 时,编译器会自动在源代码中定义__AVX__

这样我可以检测项目是否使用 AVX 指令构建,如果不是回退到另一个代码路径。

有没有办法用 Clang 做同样的事情?

谢谢, 克里斯托夫

【问题讨论】:

【参考方案1】:

正确的测试是在__AVX__ 上,它与clang 和gcc 一样好用。它甚至可以与 Visual Studio 一起使用...

【讨论】:

【参考方案2】:

llvm/tools/lib/Basic/Targets.cpp中的源码:

switch (SSELevel) 
....
  case AVX:
    Builder.defineMacro("__AVX__");
...

【讨论】:

【参考方案3】:

在 Visual C++ 中,定义是 _AVX_ 而不是 __AVX__

我实际上是在检查__AVX__,但我没有成功。我的项目生成器 (CMake) 可能会遇到问题,无法正确设置标志以使用 AVX。

编辑:更正它是两个下划线,不是一个,我的错误! 所以是的,__AVX__ 正在为 VC、GCC 和 Clang 工作。 \o/

谢谢! 克里斯托夫

【讨论】:

以上是关于Clang,在源代码端检测 -mavx 编译器参数的主要内容,如果未能解决你的问题,请参考以下文章

Clang如何处理MSVC的编译参数

cmake 将 clang-cl 检测为 clang

使用Xcode开发iOS语法检查的Clang插件

自动模板参数:g ++ 7.3 vs clang ++ 6.0:哪个编译器正确?

SDAP接入Clang Static Analyzer

在Windows使用clang编译器