linux下vscode配置c++,使其和Visual Studio2019一样调试

linux下c++编译的方式

        在win下visual studio为我们进行了大量的封装,同时设计了大量的容易操作的配置和界面,使得开发人员不过太过关注底层的编译链接过程,只需要关注代码本身即可,提升了开发的效率,但是在linux下就不一样了,linux下的编译和链接需要我们自己动手做,因此你会发现linux下会有很多种方式进行编译链接,这样只聊三种集Makefile、cmake和vscode:

Makefile

        这里来源不介绍了,直接给教程,可以看这篇文章

cmake

        cmake算是对Makefile的进一步的封装,使开发人员,不用花费大量的时间花在写Makefile上,只需要简单的几个命令即可完成编译链接操作,详细的教程可以看看我前几篇文章,也可以看看其他人的文章,不难理解

VScode c++环境配置

        虽然Makefile和cmake都可以完成c++的编译链接操作,但是因为在win开发用的vs2019的ide,比较喜欢在ide上进行编译链接和调试,那么最好的ide就是vscode,vscode不是针对c++的编译器,可说他是一个工具,可定制的编程ide工作,那么想要达到我的目的我就需要对其进行配置,使其和vs2019那样,如何操作呢?接下来将详细介绍如何配置:

1. 项目说明

        该实验项目是需要依赖opencv的库,也有多个源码cpp文件,通过main进行调用,那么就需要配置vscode使其支持多文件的编译和链接,同时支持依赖外部库,话不多说,这里开始工作,文件的目录结构如下:

 上面的cmakelists.txt和build文件夹,大家不用理会,那是使用cmake操作的,目录只包含src和根目录的main.cpp,src的源文件依赖opencv,同时src存在大量的cpp文件。

2. 配置vscode环境

        第一步你应该了解vscode配置c++环境时需要的三个文件分别是:tasks.json、launch.json、c_cpp_properties.json,这个三个文件,关于这三个文件可以看看这篇文章,网上其他的文章大多数都是hello word,这种配置很简单的,但是复杂的是多文件、多文件和多目录下面的文件编译和调试配置,这里将详细介绍,首先你需要明白的是无论是cmake还是vscode还是其他最终都是通过Makefile进行编译链接的,而不同之处在于他们进一步对Makefile进一步的封装,因此我们配置vscode的其实也是配置Makefile的命令而已,理解到这一步就好做了,

先看看c_cpp_properties.json这个文件:

 这个文件的最大作用是包含头文件, 使你在编写c++是能够找到函数,代码会高亮不会出现波浪形提示,因此这里应该添加你的外部库的头文件,如opencv的头文件等

launch.json文件

 该文件主要是添加gdb调试任务

tasks.json文件

 这个文件很重要,他是编译链接的主要配置文件,通常如果有多个文件夹直接澡-g后面把源文件目录添加进来即可,可以是.cpp和.c文件,然后采用通配符的方式自动添加即可,如果依赖第三方库在后面直接添加即可,其中:

-I (大写i)是包含目录的意思

-L是包含库目录的意思

-l (L小写)是链接库的意思

还有很多命令都可以通过这里添加,这样需要去研究Makefile的命令,因为上面的命令都是Makefile的命令。

调试画面:

 跟踪到源码

方便大家使用:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ 生成活动文件",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-std=c++11",
                "-g",
                "${file}",
                "${fileDirname}/src/*.cpp",
                //"${fileDirname}/*.c",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
                // 设置动态链接库
                "-I", "/usr/local/include",
                "-I", "/usr/local/include/opencv2",
                "-I", "/usr/local/include/opencv",
                "-L", "/usr/local/lib",
                "-l", "opencv_videoio",
                "-l", "opencv_ml",
                "-l", "opencv_videostab",
                "-l", "opencv_features2d",
                "-l", "opencv_calib3d",
                "-l", "opencv_video",
                "-l", "opencv_superres",
                "-l", "opencv_objdetect",
                "-l", "opencv_flann",
                "-l", "opencv_dnn",
                "-l", "opencv_stitching",
                "-l", "opencv_imgproc",
                "-l", "opencv_highgui",
                "-l", "opencv_photo",
                "-l", "opencv_core",
                "-l", "opencv_imgcodecs",
                "-l", "opencv_shape",
            ],
            "options": {
                //"cwd": "${fileDirname}"
                "cwd": "/usr/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>