在此文之前,从网络搜索到的教程都多少有些问题,实际操作不可行。
最关键是我需要的两个目标是:
目标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"
},