VSCode-C++编译器正确配置|解决undefined reference to等各种报错

前言

哎,遇到这么多问题,真的想吐槽一下,网络上大部分技术文章的质量真是堪忧啊,就连C++编译器配置这么简单问题,想找到一篇正确配置的文章都那么难。现在的博文难道真的是变了味了吗?

吐槽归吐槽,笔者带大家从头来配置编译器并且创建一个良好的文件夹结构用来分别管理头文件、源文件、运行程序、调试文件。

之前写过一篇文章 Virtual Studio Code-如何创建或编译C++环境|快速入门 ,为了确保我们的环境是一样的,请大家先看那篇文章。

像那篇文章中那样配置后,我们已经可以调试运行了。但是!在后面分文件编写代码时,会报错。

报错:

C:\user\AppData\Local\Temp\ccZCt7jq.o: In function `main':
A:/MajorFolder/CodeLanguage/C++/10/Program.cpp:8: undefined reference to `TestMethod()'
collect2.exe: error: ld returned 1 exit status

编辑器告诉我们TestMethod()方法没有被找到。如果不分文件编写就不会报错,这个问题就挺奇怪的吧。像大项目的话,分文件编写肯定是必要的。我这里所说的分文件编写,你可以去试试,看看有没有报错,如果你不是很清楚的什么叫分文件编写的话,你可以看下这篇文章 函数-分文件编写,把里面的示例复制到你的编辑器里试一试。

如果没有发生任何报错,那最好了。后面的内容对你可能也会有帮助。

开始配置

分文件编写对于商业项目而言是必要的,一个好的文件夹结构管理同样必不可少。下面来设置一下编译器的配置。

我们先在项目文件夹中创建一个.vscode文件夹(如果没有的话)

在.vscode文件夹中找到或创建一个名为“launch.json”的文件,将内容全部替换为以下内容。注意以下部分内容需要根据自己的环境做出修改,具体看我写的注释。

  1. 修改"program"属性,"program": "${workspaceFolder}\\Debug\\${fileBasenameNoExtension}.exe",指定一个exe执行文件的输出路径。${workspaceFolder}代表你的工作区及项目文件夹根目录,${fileBasenameNoExtension}代表要编译的cpp文件的文件名字。这边可以不用改,可以直接按照我的配置来,当然也可以你自己自定义路径。
  2. 修改“cwd”属性,"cwd": "${workspaceFolder}\\Debug",文件夹路径要与program属性文件夹路径保持一致(不包含文件路径)。(这边可以不用改)
  3. "externalConsole": true,修改此项,让其弹出控制台终端,而不是vscode界面
  4. 修改“miDebuggerPath”属性,"miDebuggerPath": "C:\\Program Files (x86)\\mingw64\\bin\\gdb.exe",注意:这里一定要写你自己电脑里mingw编译器的环境路径,指定到最终的gdb.exe文件。
  5. 修改“preLaunchTask”属性"preLaunchTask": "C/C++: g++.exe 生成活动文件" ,这个用来给编译器命名的,会按照你的命名显示在vs编译器选项栏里。
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
     "version": "0.2.0",
     "configurations": [
         {
             "name": "g++.exe build and debug active file",
             "type": "cppdbg",
             "request": "launch",
             "program": "${workspaceFolder}\\Debug\\${fileBasenameNoExtension}.exe",
             "args": [],
             "stopAtEntry": false,
             "cwd": "${workspaceFolder}\\Debug",//out here is the folder named out
             "environment": [],
             "externalConsole": true,      //修改此项,让其弹出控制台终端,而不是vscode界面
             "MIMode": "gdb",
             "miDebuggerPath": "C:\\Program Files (x86)\\mingw64\\bin\\gdb.exe",   //注意:正确配置mingw编译器gdb路径
             "setupCommands": [
                 {
                     "description": "Enable pretty-printing for gdb",
                     "text": "-enable-pretty-printing",
                     "ignoreFailures": true
                 }
             ],
             "preLaunchTask": "C/C++: g++.exe 生成活动文件" //修改此项
         }
     ]
}

在.vscode文件夹中找到或创建一个名为“tasks.json”的文件,将内容全部替换为以下内容。注意以下部分内容需要根据自己的环境做出修改,具体看我写的注释。

  1. 修改“label”属性,"label": "C/C++: g++.exe 生成活动文件",这里的label属性一定要跟“launch.json”文件中的preLaunchTask属性值一样。
  2. 修改“command”属性,"command": "C:\\Program Files (x86)\\mingw64\\bin\\g++.exe",注意:安装自己的环境正确配置mingw编译器g++路径
  3. 修改args里的参数,(这边可以不用改)可以直接按照我的配置来。
    • 设置  -I,及-I对应的文件夹 (include)
    • 设置  -o,及-o对文件夹 (Debug)
    • 设置  -g,及-g对应的文件(source)
  4. 修改“detail”属性,"detail": "编译器: \"C:\\Program Files (x86)\\mingw64\\bin\\g++.exe\""路径跟command一致即可。
{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "cppbuild",
			"label": "C/C++: g++.exe 生成活动文件",
			"command": "C:\\Program Files (x86)\\mingw64\\bin\\g++.exe",
			"args": [
				"-fdiagnostics-color=always",
				"-g",
				"${workspaceFolder}/source/*.cpp",//all cpp from source
				"-I", //include
                "${workspaceFolder}/include", //include path
				"-o",
				"${workspaceFolder}\\Debug\\${fileBasenameNoExtension}.exe"
			],
			"options": {
				"cwd": "${fileDirname}"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": "build",
			"detail": "编译器: \"C:\\Program Files (x86)\\mingw64\\bin\\g++.exe\""
		}
	]
}

保存以上文件后,调试一下。

  • F5: 调试程序
  • CTRL+F5:运行程序
  • ctrl + shift + B (build)

我们可以把.vscode文件夹保存下来作为项目配置的模板,以后创建新的项目可以直接复制进去。

可以参考我的配置文件:

来源:诚通网盘 | 提取码:unitymake

 

 

作者:Miracle
来源:麦瑞克博客
链接:https://www.unitymake.com/archives/programming-life/2191
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!
THE END
分享
打赏
海报
VSCode-C++编译器正确配置|解决undefined reference to等各种报错
从头配置编译器,解决无法分文件编写代码问题,并且创建一个良好的文件夹结构用来分别管理头文件、源文件、运行程序、调试文件。之前写过一篇文章 Virtual Studio Code-如何创建或编译C++环境|快速入门 ,为了确保我们的环境是一样的,请大家先看那篇文章。
<<上一篇
下一篇>>
文章目录
关闭
目 录