VSCode-配置多文件编译
默认VSCode 只能编译单个文件,若多个文件一起编译,经常会报 undefined reference
找不到引用的错误,比如下面的问题:
这个时候即使你把所有的cpp code 都放到main函数所在的cpp code 的文件夹都不行,还是会报一样的问题。
解决方法如下:
这种情况其实只需要配置一下 .vscode
文件夹下的 tasks.json
就好了。
默认生成的 tasks.json
如下(没有tasks.json的话,就把界面点到代码的界面,然后菜单栏"Terminal"-"Configure Tasks..." 生成默认的tasks.json):
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "E:\\msys64\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "E:\\msys64\\mingw64\\bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "编译器: E:\\msys64\\mingw64\\bin\\g++.exe"
}
]
}
不同机器的配置可能不同,不过大概就是上述的样子,
找到 tasks.json
中的 args
选项,这个主要是用来配置待编译的文件信息的,修改如下:
"args": [
"-fdiagnostics-color=always",
"-g",
"${workspaceFolder}\\*.cpp",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
主要就是将:${file}
替换成 ${workspaceFolder}
, 最终配置的结果如下:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "E:\\msys64\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${workspaceFolder}\\*.cpp",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "E:\\msys64\\mingw64\\bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "编译器: E:\\msys64\\mingw64\\bin\\g++.exe"
}
]
}
再次运行程序,就可以多文件正常编译了:
当然上述例子中,我的main函数所在的cpp 与 其它 cpp 文件是在同一级目录下的:
要是你还含有其它的二级目录,即:有些cpp 文件是在其它的二级目录下的,那就还需要修改tasks.json
文件, 比如类似于这样:
main函数所在test.cpp在一级目录下,其它cpp文件在 others 目录下,这个时候就需要把tasks.json改成:
"args": [
"-fdiagnostics-color=always",
"-g",
"${workspaceFolder}\\*.cpp",
"${workspaceFolder}\\others\\*.cpp",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
无论如何,一定要确保编译器能够顺利找到这些cpp 文件的位置。
参考链接
微软官网上也有看到这个问题,微软给的方案是:
Link: https://code.visualstudio.com/docs/cpp/config-mingw#_compiler-path