问题描述
在Mac或者LInux上,进行C/C++相同路径下进行多文件编译时,之前设置好的json文件突然不能解释通配符,并且将带有单引号的地址传给clang,由于*.c被扩在单引号中,clang找不到文件导致失败。
如果将命令端中的指令复制下来,把单引号去掉再执行,clang可以正确编译文件,看来问题出现在vs code把指令传递给clang时出现了问题。它没有办法理解*,并且为了安全,还特意给路径上加上了单引号防止解析。
解决方案
将type中的cppbuilder
改为shell
,更改后的tasks.json文件如下
"version": "2.0.0",
"tasks": [
{
"type": "shell", //修改此处
"label": "C/C++: clang 生成活动文件",
"command": "/usr/bin/clang",
"args": [
"-fcolor-diagnostics",
"-fansi-escape-codes",
"-g",
"${workspaceFolder}/*.c",
"-o",
"${workspaceFolder}/${workspaceFolderBasename}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"detail": "编译器: /usr/bin/clang",
}
]
}
launch.json文件不用修改
{
"version": "0.2.0",
"configurations": [
{
"name": "clang - Build and debug active file",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/${workspaceFolderBasename}.exe",
"args": [],
"cwd": "${fileDirname}",
"preLaunchTask": "C/C++: clang 生成活动文件"
},
]
}
上述改法Mac和Linux通用,shell可以完美解析通配符,并将其传递给clang,就这么一个简单的问题思考了很久0.0,希望可以帮各位节省宝贵时间。