問題描述
在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,希望可以幫各位節省寶貴時間。