下面整理自:https://www.cnblogs.com/penen/p/13403571.html
VScode不能像MOOC上面讲的Devc++那样子。
“从编译器的角度看,一个.C文件是一个编译单元,而编译器同一时间只会处理一个编译单元,即只会对一个编译单元去做编译。编译完了之后形成的是.O文件,即目标代码文件,然后由链接器Link来把他们链接在一起。
在有些IDE中分开两个按钮编译和构建,compile只是产生.O文件,
而build才是把这些.O文件连接起来形成一个可执行的程序
而DEVC++没有分开,只有一个。
那VScode怎么办?这是由于VSCODE实际上是一个文本编辑器,不是一个IDE,它不会自动链接项目通过头文件引用的.c文件。要解决这个问题,就要告诉编译器需要链接哪些文件。
下面整理自:https://www.cnblogs.com/shadowfish/p/12059872.html
在使用VSCODE进行C语言程序设计时,如果用到了头文件声明函数,.c文件定义函数,在编译时尽管已经引用了相应的头文件,VSCODE文本编辑器也没有报错,但仍然无法编译。
错误提示如下:
d:/ComputerHomework/2019_winter/main.c:10: undefined reference to `ReadPathTkFile'
这是由于VSCODE实际上是一个文本编辑器,不是一个IDE,它不会自动链接项目通过头文件引用的.c文件。要解决这个问题,就要告诉编译器需要链接哪些文件。
解决方法
在当前路径下的.vscode文件夹中找到tasks.json,找到"args"属性,在其中"-g"后,"-o"前加入"${fileDirname}\YourcFileName.c",每组字符串以逗号分隔。YourcFileName.c即项目中要参与编译的文件名。
样例如下(仅参考填写格式,具体参数不相同正常)
{
"tasks": [
{
"type": "shell",
"label": "gcc.exe build active file",
"command": "C:\\mingw64\\bin\\gcc.exe",
"args": [
"-g",
"${file}",
"${fileDirname}\\IstkFile.c",
"${fileDirname}\\PrintQuestion.c",
"${fileDirname}\\MarkingSystemLib.c",
"${fileDirname}\\zqyLib.c",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "C:\\mingw64\\bin"
}
}
],
"version": "2.0.0"
}
如果觉得一个个添加文件比较麻烦,可以使用MakeFile的方法。这里不做详细介绍。
下面的链接是C++MakeFile模板:
C++MakeFile模板