近些年来,由于VS Studio体积庞大、价格昂贵等原因,越来越多的C/C++开发者转投VSCode的怀抱。VSCode有着免费1、开源2、多平台支持、占用系统3资源少、插件丰富、界面美观等诸多特点。对于初学者来说,是非常方便使用的IDE。许多同学在使用VSCode时,在同一文件夹下,存在多个文件时,编译器无法找到引用的.h文件定义的问题,通过简单几步配置,即可此解决问题。

  1. 问题描述
  • 打开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文件。
  1. 解决方法
  • 在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"字符
    在这里插入图片描述
  1. 问题原因

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}前打开的文件,光标所在的行数

  1. VSCode使用的是 MIT Lisense, 可随意下载, 分发, 商用等. 点击下载 ↩︎

  2. github可直接看到源码, 点击查看,开源让更多开发者参与进来, 集思广益, 推动这款优秀的 IDE 发展. ↩︎

  3. 下载vscode 1.29.0, 只有 44 MB 大小,安装完约 189 MB。内存上, 相对于 eclipse, vscode 占用内存更少. eclipse 约占用 478 MB(1 个进程), vscode 约共占用 200 MB(6 个进程). ↩︎

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐