问题描述
在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,希望可以帮各位节省宝贵时间。