【vscode】程序分文件编写、调用库文件、项目代码调试(C++)

0.参考链接:

1.VSCode C++ 多文件编译

2.环境配置

3.VsCode如何使用国内镜像秒下载

4.基于 VS Code 搭建编程环境——C/C++ 篇

1.同一个文件夹下包含头文件编写实现

在这里插入图片描述
头文件+源文件在一个文件夹中
launch.json是调试的配置,tasks.json是编译的配置,调试运行需要用到,如果是终端用cmake编译都不需要
只需要c_cpp_properties.json来起一个找文件路径和智能提示的作用,还能取消报红

ctrl+shift+p进行配置和调试的修改

在这里插入图片描述
在这里插入图片描述
出现错误:
在这里插入图片描述
原因:
vscode的C/C++插件 默认情况 下只能编译调试一个cpp文件。
当加上一个自己写的头文件的时候,如果头文件中的函数定义就在头文件中实现的时候,vscode也一样可以编译调试。
但是当我们将头文件中声明的函数在源文件中实现的时候,vscode找不到func.cpp源文件了,所以会报错main.cpp中未定义。

解决方法:
修改tasks.json文件中的"args"[] 中的-g包含的cpp文件

args下有三个重要的配置:

  1. -g:参与调试的cpp文件
  2. -I:参与调用的头文件
  3. -o:生成的可执行文件(比如:win下是exe…)

在这里插入图片描述

这里的法则是:
加上func.cpp的编译就可以了
*.cpp是模糊搜索,所有cpp的文件都参与调试

在这里插入图片描述

2.分文件夹编写(自己手写.h)

在主文件下创建两个文件夹,一个include包含头文件,一个是src包含源文件
在这里插入图片描述

这时运行发现,出现如下错误:

在这里插入图片描述

如果头文件和源文件在一起,编译器可以在同文件夹下找到。
但我们将func.h文件放到了子文件夹下,编译器找不到头文件了。
也可以给具体名字,具体哪个文件夹下的哪个文件
在这里插入图片描述
运行成功:
在这里插入图片描述

3.配置库文件(以opencv举例)

之前的头文件和源文件是我们自己写的,一些大型的库是直接封装好,只给你了库文件(.a或.so)和头文件,这时候我们不需要再对源文件进行编译了,而是要链接上他所给的库文件。
下面给一段测试代码:

#include<iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>

using namespace std;
using namespace cv;

int main()
{
    cout << "This is a test!" << endl;
    cout << "----------------" << endl;

    Mat img = imread("./ubuntu.png",IMREAD_COLOR);
    imshow("UBUNTU", img);
    waitKey(0);
    return 0;
}

之前Ubuntu系统里面已经装好了opencv3.2.0,用locate opencv找到他的头文件和库文件的位置
我的头文件路径是在:/usr/local/include/opencv2/**.hpp
库文件路径是在:/usr/local/lib/…
在这里插入图片描述

一定要把具体的库写上,这里注意的是虽然库文件是lib*.a或者lib*.so这样的格式,但是要去掉前面的lib和后面的后缀
这样就就是把库文件链接好了。

在这里插入图片描述

4.插件code_runner的使用----配置多cpp文件编译

单个cpp文件直接运行就可以了,但是当我们自己提供源文件的时候,默认只是会编译main.cpp

报错:
[Running] cd “d:\vscode_project” && g++ test.cpp -o test && "d:\vscode_project"test
C:/TDM-GCC-64/bin/…/lib/gcc/x86_64-w64-mingw32/10.3.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: C:\Users\59723\AppData\Local\Temp\ccUv3ptC.o:test.cpp:(.text+0xe): undefined reference to `printHello()’
collect2.exe: error: ld returned 1 exit status
[Done] exited with code=1 in 0.481 seconds

在设置中搜索code,找到code-runner的设置:
在这里插入图片描述

进入以后找到cpp的配置进行修改:将 $fileName 替换为 *.cpp,即可编译文件下所有的cpp文件了。

在这里插入图片描述

setup 只编译 main.cpp,忽略所有其他 cpp,或者需要用 main 编译的 c 文件

5.C++项目调试配置

项目基于:【回环检测】DLoopDetector(C++)代码阅读笔记

5.1 配置JSON文件

快捷键【Ctrl+Shift+P】打开命令面板,输入C++ Edit

在这里插入图片描述
选择UI配置(就是窗口界面配置,去c_cpp_properties.json配置一样的),进入到IntelliSense 配置。

选择你的编译器路径,我用的是cpp语言,所以选择/usr/bin/g++

选择IntelliSense模式,电脑是64位的Linux 默认为 linux-gcc-x64

包含路径:include 路径是包括源文件中随附的头文件(如 #include “myHeaderFile.h”)的文件夹。

都配置完成后,左侧资源管理器会出现一个.vscode的文件夹,里面出现了两个配置文件,c_cpp_properties.json和settings.json,刚才在UI配置中修改的都会在这里实时修改

配置好后找到demo_brief.cpp,点击右上角有运行/调试,选择g++
在这里插入图片描述

出现了很多报错,是因为还没有配置.h和库文件所致。

在这里插入图片描述

左侧新增了一个task.json文件,按照之前说的添加上去,过程其实有点麻烦,添加后的:

其中有很多预先定义变量:vs code中的类似${workspaceFolder}的变量的解释

c_cpp_properties.json:主要负责智能提示和爆红

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/local/include/DBoW2",
                "/usr/local/include/DUtils",
                "/usr/local/include/DUtilsCV",
                "/usr/local/include/DVision",
                "include/DLoopDetector"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/g++",
            "cStandard": "c11",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

task.json:主要负责运行和调试

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ 生成活动文件",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g","${file}",
                "-o","${fileDirname}/${fileBasenameNoExtension}",
                "-I","/usr//include",
                "-I","/usr/local/include/DBoW2",
                "-I","/usr//include/opencv2",
                "-I","/usr/local/include/DUtilsCV",
                "-I","/usr/local/include/DUtils",
                "-I","/usr/local/include/DVision",
                "-I","${workspaceFolder}/include/DLoopDetector",
                "-L","/usr/local/lib",
                "-l","DBoW2",
                "-l","DLib",
                "-L","/usr/lib",
                "-L","/usr/lib/x86_64-linux-gnu",
                "-l","opencv_core",
                "-l","opencv_imgcodecs",
                "-l","opencv_flann",
                "-l","opencv_features2d", 
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

中间过程遇到了一个小问题,就是libDBoW2.so和libDLib.so这两个库放在/usr/local/lib下找不到,参考网上一些建议将他们复制到了/usr/lib下,可以了

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在VS Code中远程调用Linux的C++环境,你需要安装并配置以下工具: 1. VS Code: 这是代码编辑器,你需要在本地安装它。 2. SSH: 你需要在本地和远程机器上安装SSH,以便进行安全的远程连接。 3. C++编译器: 你需要在远程机器上安装C++编译器,如GCC或Clang。 4. CMake: 你需要在远程机器上安装CMake,它是一个跨平台的构建工具,用于管理C++项目的构建过程。 完成上述安装后,你可以通过以下步骤进行远程调试: 1. 在VS Code中安装“Remote Development”扩展: 这个扩展可以帮助你在本地VS Code中进行远程开发和调试。 2. 使用SSH连接到远程机器: 在VS Code的“远程资源管理器”中,点击“SSH Targets”下的“+”按钮,并输入远程机器的SSH连接信息。 3. 在远程机器上创建C++项目: 在远程机器上使用CMake创建一个新的C++项目,并使用你喜欢的代码编辑器进行编写调试。 4. 在VS Code中打开远程项目: 在VS Code的“远程资源管理器”中,选择远程机器上的C++项目,并打开它。 5. 在VS Code中配置调试器: 在VS Code的“调试”面板中,选择“C++ (GDB/LLDB)”调试器,并配置调试器选项,如调试选项、编译器路径等。 6. 开始调试: 在VS Code中按下调试按钮,开始远程调试C++项目。 这些步骤只是一个大致的指南,具体实施时还需要根据你的实际情况进行调整和配置。希望这些信息对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值