问题描述:
- vs code引用.h文件找不到:no such file
- 找到.h文件后,会出现undefined reference to xxxxxx
解决方法 .h的no such file
include里加相对路径是可以的,但是会出现未定义的问题:
但是includepath里加这个反而没用
配置/C++并添加非工作区头文件:https://www.cnblogs.com/didea/p/9853620.html
参考以上帖子,需要
(1)在c_cpp_properties.json中添加头文件路径。
(2)在tasks.json中修改命令行参数
流程
只在c_cpp_properties.json中添加头文件路径,并不会有用,
依然会出现以下报错:
在tasks.json中添加链接库
"-g"产生调试信息,
"-c"编译中间目标文件,
"-I"指定链接库,
"-o"生成指定命名的可执行文件
只动态链接include库以及出现以上报错
加入cpp部分也是以上报错
在产生调试信息后加上也依旧是以上报错
一条条在includepath上注释后发现vs code是可以识别到json.h的:
在该种情况下,json.h也可以被识别到,这说明是没用编译的原因,main.cpp。
但是修改了-g后面的内容没用反应,实现上还是没有运行json.cpp
将main文件放到同个文件夹中,然后手动编译运行,运行成功
说明问题在于没办法读取其他文件夹中的文件以及无法编译其他文件夹的文件
所以搜索单文件编译与多文件编译的内容,
参考:https://blog.csdn.net/kuangwei_/article/details/106819439
还是在task.json中处理
单文件编译与多文件编译
单文件夹中单文件编译与多文件编译
在task.json文件中,”args“部分:
${fileDirname}\*.cpp //将当前路径下的所有cpp文件都进行了编译
在改为** ${file} **之后,则是等同于在命令行里执行了 g++ file.cpp
变量名 | 含义 |
---|---|
${workspaceRoot} | 当前打开的文件夹的绝对路径+文件夹的名字 |
${workspaceRootFolderName} | 当前打开的文件夹的名字 |
${file} | 当前打开正在编辑的文件名,包括绝对路径,文件名,文件后缀名 |
${relativeFile} | 从当前打开的文件夹到当前打开的文件的路径 |
如 当前打开的是test文件夹,当前的打开的是main.c,并有test/first/second/main.c | |
那么此变量代表的是 first / second / main.c | |
${fileBasename} | 当前打开的文件名+后缀名,不包括路径 |
${fileBasenameNoExtension} | 当前打开的文件的文件名,不包括路径和后缀名 |
${fileDirname} | 当前打开的文件所在的绝对路径,不包括文件名 |
${fileExtname} | 当前打开的文件的后缀名 |
${cwd} | 任务开始运行时的当前工作目录 |
${lineNumber} | 当前打开的文件,光标所在的行数 |
多文件夹下单文件与多文件编译
分析
1、c_cpp_properties.json一般用于添加包含路径,方便程序员编写代码时直接引用外部文件。该文件对编写代码有用,引用文件时不会提示错误,但对运行代码用处不大。
2、launch.json和tasks.json用于调试运行代码。
3、settings.json是runcode的配置文件,用于直接点击运行代码。
实现
链接其他文件夹中的include文件
- 在a.cpp 文件中要引用其他文件夹的 b.h 需要在c_cpp_properties.json -> configurations -> includePath添加a1.h所在文件夹路径。
- 但是由于二者不在同一文件夹中,调试时,先不要动态链接b.h的文件夹路径
- 同理在setting.json中加入b.h的路径
以上效果和引用相对路径效果一样