VSCode-多文件编译执行

VSCode-配置多文件编译

默认VSCode 只能编译单个文件,若多个文件一起编译,经常会报 undefined reference 找不到引用的错误,比如下面的问题:

image-20221028142859782

这个时候即使你把所有的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"
		}
	]
}

再次运行程序,就可以多文件正常编译了:

image-20221028143728325

当然上述例子中,我的main函数所在的cpp 与 其它 cpp 文件是在同一级目录下的:

image-20221028152059537

要是你还含有其它的二级目录,即:有些cpp 文件是在其它的二级目录下的,那就还需要修改tasks.json文件, 比如类似于这样:

image-20221028152419400

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

image-20221028145628778

posted @ 2022-10-28 15:29  夜行过客  阅读(2923)  评论(0编辑  收藏  举报