为cl.exe(Visual Studio代码)指定命令行C++版本

Specify command-line C++ version for cl.exe (Visual Studio Code)

本文关键字:命令行 C++ 版本 代码 exe cl Visual Studio      更新时间:2023-10-16

我正在测试Visual Studio代码中的C++17故障转移属性。IDE已配置为使用Microsoft Visual Studio cl.exe编译器编译C/C++代码。我在调试模式下构建一个简单的.cpp文件的任务定义(在tasks.json中(是:

{
"type": "shell",
"label": "cl.exe: Build active file",
"command": "cl.exe",
"args": [
"/Zi",
"/EHsc",
"/Fe:",
"${file}",
"/link",
"/OUT:${fileDirname}\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$msCompile"
]
}

这已经在几个程序上进行了测试,效果良好。现在,我使用新的[[fallthrough]];属性包含一个switch语句,编译器生成:

warning C5051: attribute 'fallthrough' requires at least '/std:c++17'; ignored

将CCD_ 5添加到";args";对于cl.exe,没有任何更改(生成相同的编译器警告(。这是新版本:

"args": [
"/Zi",
"/EHsc",
"/Fe:",
"/std:c++17",
"${file}",
"/link",
"/OUT:${fileDirname}\${fileBasenameNoExtension}.exe"
],

据我所见,根据指定语言标准的Microsoft文档,我的语法是正确的。

我做错了什么?

我在搜索其他内容时发现了这个问题,但这里有一个修复方法:(。

你的问题在于你提供论据的顺序。/Fe:期望文件路径直接位于-之后https://learn.microsoft.com/en-us/cpp/build/reference/fe-name-exe-file?view=msvc-160

这里有一个来自VSCode文档的示例args部分,但我添加了/std:c++17编译器标志

"args": [
"/Zi",
"/EHsc",
"/std:c++17", // <= put your compiler flag here
"/Fe:", // <= /Fe: followed by the path + filename
"${fileDirname}\${fileBasenameNoExtension}.exe",
"${file}"
]

希望这有帮助,快乐编码!