转自:vscode下编译告警“undefined reference”?三步教你如何解决_squall0984的博客-CSDN博客
近些年来,由于VS Studio体积庞大、价格昂贵等原因,越来越多的C/C++开发者转投VSCode的怀抱。VSCode有着免费1、开源2、多平台支持、占用系统3资源少、插件丰富、界面美观等诸多特点。对于初学者来说,是非常方便使用的IDE。许多同学在使用VSCode时,在同一文件夹下,存在多个文件时,编译器无法找到引用的.h文件定义的问题,通过简单几步配置,即可此解决问题。
- 问题描述
- 打开TEST文件夹,创建hello.c, hello.h文件,
hello.c
#include <stdio.h>void hello()
{printf("hello\n");
}
hello.h
#ifndef __HELLO_H__
#define __HELLO_H__extern void hello();#endif
- 创建main.c
main.c
#include "hello.h"void main()
{hello();
}
- 选择main.c,Run->Start Debugging,会出现编译器报错“undefined reference to `hello’”
出现此问题的原因,是编译器仅编译了main.c文件,而未编译hello.c文件。
- 解决方法
- 在VSCode工程界面中,按压Ctrl+Shift+p,在弹出的输入框中,输入Tasks后,从提示选单中选择Configure Task,再选择C/C++:gcc.exe build active file
- 此时,.VSCode目录下会生成tasks.json文件
tasks.json
{"version": "2.0.0","tasks": [{"type": "shell","label": "C/C++: gcc.exe build active file","command": "D:\\Program Files\\mingw-w64\\x86_64-8.1.0-win32-seh-rt_v6-rev0\\mingw64\\bin\\gcc.exe","args": ["-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "D:\\Program Files\\mingw-w64\\x86_64-8.1.0-win32-seh-rt_v6-rev0\\mingw64\\bin"},"problemMatcher": ["$gcc"],"group": "build"}]
}
- 将args参数中的
${file}
修改为${fileDirname}\\*.c
,再次执行Run->Start Debugging,可以看到终端中成功的显示了"hello"字符
- 问题原因
tasks.json文件中的args参数,实际上就是调用gcc时,后面所跟的参数在初始的配置中,实际上编译器执行的命令为gcc -g main.c -o main.exe,而修改后的配置中,执行的命令是gcc -g main.c hello.c -o main.exe,这是由于参数${file}
代表的是被编译的当前文件,而参数${fileDirname}\\*.c
代表的是当前目录下的所有.c文件。
同时,在此附上.json文件中,各变量名所代表的含义,共参考,查看来源。
变量名 | 含义 |
---|---|
${workspaceRoot} | 当前打开的文件夹的绝对路径+文件夹的名字 |
${workspaceRootFolderName} | 当前打开的文件夹的名字 |
${file} | 当前打开正在编辑的文件名,包括绝对路径,文件名,文件后缀名 |
${relativeFile} | 从当前打开的文件夹到当前打开的文件的路径,如当前打开的是test文件夹,当前的打开的是main.c,并有test/first/second/main.c 那么此变量代表的是 first / second / main.c |
${fileBasename} | 当前打开的文件名+后缀名,不包括路径 |
${fileBasenameNoExtension} | 当前打开的文件的文件名,不包括路径和后缀名 |
${fileDirname} | 当前打开的文件所在的绝对路径,不包括文件名 |
${fileExtname} | 当前打开的文件的后缀名 |
${cwd} | 任务开始运行时的当前工作目录 |
${lineNumber} | 前打开的文件,光标所在的行数 |
-
VSCode使用的是 MIT Lisense, 可随意下载, 分发, 商用等. 点击下载 ↩︎
-
github可直接看到源码, 点击查看,开源让更多开发者参与进来, 集思广益, 推动这款优秀的 IDE 发展. ↩︎
-
下载vscode 1.29.0, 只有 44 MB 大小,安装完约 189 MB。内存上, 相对于 eclipse, vscode 占用内存更少. eclipse 约占用 478 MB(1 个进程), vscode 约共占用 200 MB(6 个进程). ↩︎