ubuntu配置vscode,编译opencv

在此文之前,从网络搜索到的教程都多少有些问题,实际操作不可行。

最关键是我需要的两个目标是:

目标1:点击某个按钮编译当前源文件、不执行链接。-- 这个目标是用于快速编辑排错

目标2:编译连接全部源文件,单步调试。-- 连接系统库、opencv库、各个源文件的函数

我自己根据各方参考做了一个,每一步都是实际操作过。

==================================================== 正文

Ubuntu下配置VScode的C/C++开发环境

a) Vscode安装

    从VScode官网下载.deb文件,执行dpkg进行安装
    地址  https://code.visualstudio.com/
    命令举例 sudo dpkg -i code_1.63.0-1638855526_amd64.deb

b) Vscode环境配置
    1)安装c/c++插件
    通过左边栏的Extension栏目安装C++插件
    2)建立工程
    2.1)加入已有的工程
        执行菜单: 文件 -- 将文件夹加入工作区
    2.2)新建工程
    新建一个文件夹。
    通过VScode打开此文件夹;
    新建main.cpp文件并输入程序;
    
    3)更改配置文件
        以下按照目标来配置
        遇到问题,解决之道是要在命令行执行通过,然后再到配置文件设置

    4)============ 编译一个源代码文件
    目标,点击界面右上角的三角,编译本文件。一般用于编辑、排错,这里不含连接库文件,后一步在linux里面可复杂了。

    1/ 打开设置界面
           快捷键: ctrl+,  或 菜单: 文件 -- 首选项 -- 配置
    2/ 搜索栏粘贴下面内容 code-runner.executorMap
         点击在 settings.json 中编辑
        添加或编辑以下内容。其中 -c 表示仅编译,此时不需要提供 -L路径以及-l连接库
        "code-runner.executorMap": {
            "python": "set PYTHONIOENCODING=utf8 && python -u",
            //使用 C11 或 C++14
            //  -如果你还有其他头文件路径,照例加 -I参数,I后面不用空格
            "c": "cd $dir && mkdir -p ../obj && gcc -I/usr/local/include -I/usr/local/include/opencv4 -I./ -std=c11 -c $fileName -o ../obj/$fileNameWithoutExt.o",
            "cpp": "cd $dir && mkdir -p ../obj && g++ -I/usr/local/include -I/usr/local/include/opencv4 -I./ -std=c++14 -c $fileName -o ../obj/$fileNameWithoutExt.o",
        },
        其余参考配置项
        "cmake.configureOnOpen": true,
        "C_Cpp.default.compilerPath": "/usr/local/include/**",
        "C_Cpp.default.cppStandard": "c++11",
        "C_Cpp.default.cStandard": "c11",
        "C_Cpp.default.intelliSenseMode": "linux-gcc-x64",
        "C_Cpp.default.mergeConfigurations": true,
        "C_Cpp.default.systemIncludePath": [
            "/usr/local/include/**"
        ],
        "C_Cpp.default.includePath": [
            "/usr/local/include/**",
            "/usr/local/include/opencv4"
        ],
        "code-runner.ignoreSelection": true,
        "code-runner.saveFileBeforeRun": true,
        "code-runner.runInTerminal": true,
        3/ 效果
            上述配置保存后,打开一个源文件,点击右上角的三角,或执行快捷键 ctrl+alt+n, 就会只编译当前源代码文件
    
    5)============ 编译、连接全部源代码文件
    这一步一般用来单步调试。如果在最终工程输出场景,可在命令行 cmake make 执行。

        5.1) launch.json
        点击左侧的Debug按钮,选择添加配置(Add configuration),然后选择C++(GDB/LLDB),将自动生成launch.json文件
                {
                    // 使用 IntelliSense 了解相关属性。 
                    // 悬停以查看现有属性的描述。
                    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
                    "version": "0.2.0",
                    "configurations": [
                        {
                            "name": "myLaunch",
                            "type": "cppdbg",
                            "request": "launch",
                            // 此项与下面 mybuild task的 -o 输出一致
                            "program": "${fileDirname}/../obj/${fileBasenameNoExtension}",
                            "args": [ ],
                            "miDebuggerPath":"/usr/bin/gdb",
                            "stopAtEntry": false,
                            "cwd": "${fileDirname}",
                            "environment": [],
                            "externalConsole": false,
                            // "MIMode": "gdb",
                            "MIMode": "lldb",
                            // 此项配合下面 mybuild task
                            "preLaunchTask": "mybuild",
                                "setupCommands": [
                                    {
                                        "description": "Enable pretty-printing for gdb",
                                        "text": "-enable-pretty-printing",
                                        "ignoreFailures": true
                                    }
                                ]
                        }
                    ]
                }
                
            这个文件需要以下操作调用调试: 按 F5 或 执行菜单 运行 -- 启动调试

        5.2)tasks.json
            首先,利用快捷键ctrl+shift+p打开命令行,输入Tasks: Run task,会出现如下提示:
                No task to run found. configure tasks...
            回车,然后依次选择如下来初建文件:
                Create tasks.json file from template
                Others Example to run an arbitrary external command.
            内容如下:
                    {
                        "tasks": [
                            {
                                "type": "shell",
                                "label": "mybuild",
                                "command": "/usr/bin/g++",
                                "args": [
                                    "-g",
                                    "-std=c++11",
                                    // 此处最关键,编译全部源代码文件,这样会自动连接源文件之间的函数
                                    "${fileDirname}/*.c*",
                                    //"${file}", 网络搜索的教程编译一个文件
                                    "-o",
                                    "${fileDirname}/../obj/${fileBasenameNoExtension}",
                                    "-I/usr/local/include",
                                    "-I/usr/local/include/opencv4",
                                    "-I${workspaceFolder}/src",
                                    "-L/usr/local/lib",
                 // 获取清单,ls -lc /usr/local/lib | grep ^[^d] | awk '{print $9}' | grep opencv | grep -v "\.4"
                // 去掉含版本号尾巴的条目,文件名去掉开头lib、去掉.so等扩展名,然后加上 -l 前缀
               // 后面 -lpthread 是多线程的进程需要额外加的,gcc g++ 默认不连接 pthread
                                    "-lopencv_aruco",
                                    "-lopencv_barcode",
                                    "-lopencv_bgsegm",
                                    "-lopencv_bioinspired",
                                    "-lopencv_calib3d",
                                    "-lopencv_ccalib",
                                    "-lopencv_core",
                                    "-lopencv_datasets",
                                    "-lopencv_dnn_objdetect",
                                    "-lopencv_dnn",
                                    "-lopencv_dnn_superres",
                                    "-lopencv_dpm",
                                    "-lopencv_face",
                                    "-lopencv_features2d",
                                    "-lopencv_flann",
                                    "-lopencv_freetype",
                                    "-lopencv_fuzzy",
                                    "-lopencv_gapi",
                                    "-lopencv_hfs",
                                    "-lopencv_highgui",
                                    "-lopencv_imgcodecs",
                                    "-lopencv_img_hash",
                                    "-lopencv_imgproc",
                                    "-lopencv_intensity_transform",
                                    "-lopencv_line_descriptor",
                                    "-lopencv_mcc",
                                    "-lopencv_ml",
                                    "-lopencv_objdetect",
                                    "-lopencv_optflow",
                                    "-lopencv_phase_unwrapping",
                                    "-lopencv_photo",
                                    "-lopencv_plot",
                                    "-lopencv_quality",
                                    "-lopencv_rapid",
                                    "-lopencv_reg",
                                    "-lopencv_rgbd",
                                    "-lopencv_saliency",
                                    "-lopencv_shape",
                                    "-lopencv_stereo",
                                    "-lopencv_stitching",
                                    "-lopencv_structured_light",
                                    "-lopencv_superres",
                                    "-lopencv_surface_matching",
                                    "-lopencv_text",
                                    "-lopencv_tracking",
                                    "-lopencv_videoio",
                                    "-lopencv_video",
                                    "-lopencv_videostab",
                                    "-lopencv_wechat_qrcode",
                                    "-lopencv_xfeatures2d",
                                    "-lopencv_ximgproc",
                                    "-lopencv_xobjdetect",
                                    "-lopencv_xphoto",
                                    "-lpthread"
                                ],
                                "problemMatcher": {
                                    "owner": "cpp",
                                    "fileLocation": [
                                        "relative",
                                        "${workspaceRoot}"
                                    ],
                                    "pattern": {
                                        "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                                        "file": 1,
                                        "line": 2,
                                        "column": 3,
                                        "severity": 4,
                                        "message": 5
                                    }
                                },
                                "group": "build"
                            },
                            {
                                "type": "cppbuild",
                                "label": "mycompile",
                                "command": "g++",
                                "args": [
                                    "-fdiagnostics-color=always",
                                    "-c",
                                    "${file}", 
                                    "-I/usr/local/include",
                                    "-I/usr/local/include/opencv4",
                                    "-I${workspaceFolder}/src"
                                ],
                                "options": {
                                    "cwd": "${fileDirname}"
                                },
                                "problemMatcher": [
                                    "$gcc"
                                ],
                                "group": {
                                    "kind": "build",
                                    "isDefault": true
                                },
                                "detail": "调试器生成的任务。"
                            }
                        ],
                        "version": "2.0.0"
                    }
    
            效果:执行菜单 终端 -- 运行任务... 粘贴 mybuild (上述取的名称),选择需要的工程,就会编译、连接,输出到指定目录
            如果遇错,到命令行测试一下。

(5)简单断点调试
        执行以下操作调用调试: 按 F5 或 执行菜单 运行 -- 启动调试

(6) python 自动完成
        ~/.config/Code/User/settings.json

    原文链接:https://blog.csdn.net/qq_37612550/article/details/111113571
    // 在这里添加python3的包地址,这样在源代码里能自动补全,方便写程序。
    "python.autoComplete.extraPaths": [
        "/home/joe/anaconda3/envs/p36/lib/python3.6/site-packages"
    ],
    "python.formatting.provider": "yapf",   // 使用yapf自动格式化代码
    "python.linting.enabled": false,        // lint语法提示

    "files.associations": {
        "istream": "cpp",
        "ostream": "cpp",
        "ratio": "cpp",
        "array": "cpp",
        "functional": "cpp",
        "tuple": "cpp",
        "type_traits": "cpp",
        "utility": "cpp",
        "vector": "cpp",
        "cctype": "cpp",
        "clocale": "cpp",
        "cmath": "cpp",
        "csignal": "cpp",
        "cstdarg": "cpp",
        "cstddef": "cpp",
        "cstdio": "cpp",
        "cstdlib": "cpp",
        "cstring": "cpp",
        "ctime": "cpp",
        "cwchar": "cpp",
        "cwctype": "cpp",
        "atomic": "cpp",
        "strstream": "cpp",
        "*.tcc": "cpp",
        "bitset": "cpp",
        "chrono": "cpp",
        "cinttypes": "cpp",
        "complex": "cpp",
        "condition_variable": "cpp",
        "cstdint": "cpp",
        "deque": "cpp",
        "list": "cpp",
        "unordered_map": "cpp",
        "exception": "cpp",
        "algorithm": "cpp",
        "iterator": "cpp",
        "map": "cpp",
        "memory": "cpp",
        "memory_resource": "cpp",
        "numeric": "cpp",
        "optional": "cpp",
        "random": "cpp",
        "set": "cpp",
        "string": "cpp",
        "string_view": "cpp",
        "system_error": "cpp",
        "fstream": "cpp",
        "future": "cpp",
        "initializer_list": "cpp",
        "iomanip": "cpp",
        "iosfwd": "cpp",
        "iostream": "cpp",
        "limits": "cpp",
        "mutex": "cpp",
        "new": "cpp",
        "shared_mutex": "cpp",
        "sstream": "cpp",
        "stdexcept": "cpp",
        "streambuf": "cpp",
        "thread": "cpp",
        "cfenv": "cpp",
        "typeindex": "cpp",
        "typeinfo": "cpp",
        "*.idl": "cpp",
        "*.ipp": "cpp",
        "*.txx": "cpp",
        "unordered_set": "cpp"
    },

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值