【发布时间】:2016-11-24 18:21:04
【问题描述】:
我过去遇到过这个问题:LLVM 定义了__GNUC__,但它不能使用 GCC 可以使用的程序。我在 Windows 上再次遇到它:LLVM 定义了_MSC_VER,但它不能使用 VC++ 可以使用的相同程序。 (对我来说)更糟糕的是我们为 LLVM Clang 和 Apple Clang 提供了专门的代码路径(由于版本方案不同,定义不同),我们必须与工具斗争才能让它使用它们。
我们如何告诉 Clang 停止伪装成其他编译器?有开关或选项吗?
Clang 文档 discuss the unwanted MS behavior,但他们没有说明如何阻止它:
为了与使用 MSVC 编译的现有代码兼容,clang 定义了 _MSC_VER 和 _MSC_FULL_VER 宏。这些默认值分别为 1800 和 180000000,使 clang 看起来像 Visual C++ 2013 的早期版本。-fms-compatibility-version= 标志覆盖这些值。它接受一个带点的版本元组,例如 19.00.23506。更改 MSVC 兼容版本会使 clang 的行为更像该版本的 MSVC。例如,-fms-compatibility-version=19 将启用 C++14 功能并将 char16_t 和 char32_t 定义为内置类型。
【问题讨论】:
-
你为什么不简单地调用 clang -U__GNUC__ -U_MSC _VER?我知道这并不理想,但我上次尝试它有效。
-
查看代码,没有标志可以控制:github.com/llvm-mirror/clang/blob/…
-
如果clang不能消费gcc能消费的程序,那肯定是bug。你举报了吗?
-
遇到了类似的问题。您找到解决方案/解决方法了吗?
-
#ifdef __REALLY_REALLY_GNUC__
标签: gcc visual-c++ clang llvm