我已经安装了clang 3.7并且我在visual studio中使用它。当我尝试编译时:
auto f()
{
return 2;
}
我收到错误,说这是C ++ 14的未来。我试图通过:
-std = c ++ 14作为编译器参数,但后来我得到了错误:
错误1错误:未知参数:' -std = c ++ 14' C:\ Users ... \ visual studio 2013 \ Projects \ ConsoleApplication8 \ ConsoleApplication8 \ clang-cl.exe ConsoleApplication8。
如何在Visual Studio 2013下的clang中启用c ++ 14功能?
编辑:
我必须补充一点,我能够在Visual Studio下使用这个编译器编译和构建c ++ 11代码,没有任何问题。
答案 0 :(得分:17)
clang-cl
没有使用与传统clang相同的选项语法 - 它应该模仿Visual Studio的cl
命令行,而不是clang
的命令行。
例如,来自clang-cl
' s documentation:
CL.EXE COMPATIBILITY OPTIONS:
/? Display available options
/arch:<value> Set architecture for code generation
/C Don't discard comments when preprocessing
/c Compile only
/D <macro[=value]> Define macro
...
请注意,这些选项与Microsoft的cl
选项语法类似,而不是clang
的选项语法。
但是,他们有一些传递选项来支持像你这样的案件:
OPTIONS:
...
-Xclang <arg> Pass <arg> to the clang compiler
-mllvm <value> Additional arguments to forward to LLVM's option processing
因此,调用clang-cl -Xclang -std=c++14
似乎是您最好的选择。
答案 1 :(得分:3)
我在clang-cl工作。正如antiduh所说,clang-cl试图模仿Visual Studio的cl
。 cl
直到并包括c ++ 14没有启用语言模式的开关,它只是始终启用所有最新的东西。因此,clang-cl也是如此。 MSVC在MSVC 2015中获得了一些C ++ 14支持,因此如果您告诉clang-cl您希望它模拟MSVC 2015或更高版本,它将自动启用C ++ 14。 clang-cl默认模拟系统中找到的MSVC版本。您可以显式传递-fmsc-version=1900
以强制模拟2015,然后隐式启用C ++ 14。
从MSVC 2017开始,cl.exe支持/std:
flag,因此clang-cl也支持{{3}}。它可用于启用C ++ 14(最低级别),C ++ 17,C ++ 20或最新版本。
-Xclang
标志是内部标志,不被视为稳定接口。所以不要使用它们。