【问题标题】:How to set clang-cl to c++14 or c++1z? [duplicate]如何将 clang-cl 设置为 c++14 或 c++1z? [复制]
【发布时间】:2015-08-10 08:47:00
【问题描述】:

我尝试使用 -std=c++14、-std=c++1z、-std=c++1y 设置 clang-cl 参数。他们不工作。我正在为 windows x64 和 VS 2015 使用 clang 3.7 pre-build。

【问题讨论】:

  • 我不认为你可以在 cl 模式下设置语言标准,clang 总是针对那里的最新 C++ 标准(如 MSVC)。

标签: clang visual-studio-2015 clang++ llvm-clang


【解决方案1】:

下面链接的 Clang 页面声称 -std=c++11-std=c++14 以及 -std=c++1z 都是受支持的命令。现在考虑到clang-cl,据我所知,clang --driver-mode=cl 旨在模拟 MSVC cl.exe。我不明白为什么这会消除对 c++ 标准等平台无关特性的支持。

http://clang.llvm.org/cxx_status.html

编辑:在同一主题的另一篇文章中,提到在clang-cl 模式下要将参数传递给clang 本身,您必须使用:

-Xclang <arg> Pass <arg> to the clang compiler

这里引用了这个: http://clang.llvm.org/docs/UsersManual.html#clang-cl

【讨论】:

  • 我已经尝试在 VS 编译器设置中添加这些,但没有任何效果。
  • 你说“他们不工作”是什么意思?
  • clang-cl 无法识别这些参数
【解决方案2】:

我不相信-std=c++14 应该工作。 Clang-cl 是一个独立的 clang 驱动程序(不是独立的,因为它只是对 clang 的重命名),它支持 MSVC 参数而不是 GCC 参数。

可以在here 中找到所有受支持的命令行参数的概述,其中不包含此标志。

据我了解,clang-cl 接管了 MSVC 支持的 C++ 功能,而不是使用标准(+ MSVC 不支持的一些扩展)。这一点尤其重要,因为 MSVC(2015 年之前)没有区分标准,例如 MSVC 2013 包含来自 c++11、c++14 和 c++17 的功能,而来自这些相同标准的其他功能则没有支持或无法正常工作。

所以为了能够支持 MSVC 的编译,clang 不能在不破坏编译的情况下支持 -std=c++11 标志。 (虽然它可能是你想要的) 也就是说,MSVC 2015 supports /std:c++14,所以可能也应该支持 clang-cl。 (听起来像是一个错误/功能请求)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-15
    • 2017-08-07
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多