基于vscode的cpp&cmake调试环境配置

1. 创建项目文件

  1. 创建cpp文件及CMakeLists.txt文件
  • helloOpenCV.cpp
c 复制代码
#include <opencv2/opencv.hpp>
int main() {
    // 创建图像,初始化为黑色
    cv::Mat image = cv::Mat::zeros(200, 300, CV_8UC3);
    // 设置为纯绿色 (BGR格式:0, 255, 0)
    image.setTo(cv::Scalar(0, 255, 0));
    // 显示图像
    cv::imshow("Green Image", image);
    // 等待按键
    cv::waitKey(0);
    // 销毁所有窗口
    cv::destroyAllWindows();
    return 0;
}
  • CMakeLists.txt
cmake 复制代码
cmake_minimum_required(VERSION 2.8)
project(helloOpenCV)
set(CMAKE_BUILD_TYPE "Debug")
find_package(OpenCV REQUIRED)
add_executable(helloOpenCV helloOpenCV.cpp)
target_link_libraries(helloOpenCV ${OpenCV_LIBS})

若编译过程提示缺少opencv库则执行 sudo apt install libopencv-dev

2. 生成可执行文件

shell 复制代码
# 在项目根目录下创建build文件夹
mkdir build
cd build
# 生成构建文件makefile
cmake ..
# 基于makefile构建项目生成可执行文件 helloOpencv
make
# 调用可执行程序 弹出图像
./helloOpenCV

3. vscode 调试环境配置

vscode调试环境主要包括三个文件的配置

  1. c_cpp_properties.json负责指定编译器及头文件路径
  2. tasks.json负责编译生成可执行文件
  3. launch.json负责可执行文件的调试
c_cpp_properties.json

快捷键 ctrl+shift+P 后选择 c/c++ : edit configurations(JSON)生成c_cpp_properties.json

json 复制代码
{
    "configurations": [
        {
            "name": "Linux",    
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/clang",
            "cStandard": "c17",
            "cppStandard": "c++14",
            "intelliSenseMode": "linux-clang-x64"
        }
    ],
    "version": 4
}

其中较重要的字段包括:

  • includePath:头文件搜索路径
  • compilerPath:指定C/C++编译器的路径
  • cppStandard:C++标准
  • intelliSenseMode:智能补全模式
tasks.json

点击Terminal-Configure Default Build Task 在上述CMake: ***中任意选择一项生成tasks.json即可

  • 方式1,通过自定义子task的顺序完成构建过程
shell 复制代码
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "cmake",
            "type": "shell",
            "command": "cmake",
            "args": [
                "../"
            ],
            "options": {
                "cwd": "${workspaceFolder}/build"
            },            
        },
        {
            "label": "make",
            "type": "shell",
            "command": "make",
            "args": [],
            "options": {
                "cwd": "${workspaceFolder}/build"
            }, 
        },
        {
            "label": "cmake task",
            "dependsOn":["cmake", "make"],
			"dependsOrder": "sequence"
        },
    ],
}
  • 方式2,通过调用shell脚本的形式完成构建过程(我更倾向的一种方式,定义更简单)
shell 复制代码
{
	"version": "2.0.0",
	"tasks": [
		{
			"label": "cmake task",
			"type": "shell",
			"command": "bash",
			"args": ["${workspaceFolder}/build.sh"],
			"options": {
				"cwd": "${workspaceFolder}"
			},
			"problemMatcher": ["$gcc"],
			"group": {
				"kind": "build",
				"isDefault": true
			},
			"detail": "Task generated by Debugger."
		}
	]
}

其中build.sh内容为

shell 复制代码
cd build
cmake ..
make
launch.json

点击Add configuration

将program改为要拉起的可执行程序,将prelaunchask设置为tasks.json中的label

json 复制代码
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/helloOpenCV",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "preLaunchTask": "cmake task"
        }
    ]
}

其中较重要的字段包括

  • name:自定义命名运行与调式的名称,将在左侧运行和调试的菜单中显示名称
  • type:调试器类型,C/C++的调试类型为cppdbg
  • program:可执行文件路径
  • environment:添加到程序的环境变量
  • preLaunchTask:运行和调式前要启动的tasks任务,也即要启动的编译任务,任务名要和tasks.json里面的"label"值对应一致

参考

c_cpp_properties.json字段参考
launch.json字段参考
综述详细版

相关推荐
一头大学牲1 小时前
vscode--工作区和相对路径
ide·vscode·编辑器
༺ཌༀ傲世万物ༀད༻2 小时前
KICK第三讲:解锁Visual Studio:Windows系统下的高效安装指南
ide·windows·visual studio
绿草在线4 小时前
Vue3 开发的 VSCode 插件
ide·vue.js·vscode
等风来不如迎风去4 小时前
【Pycharm】Pycharm无法复制粘贴,提示系统剪贴板不可用
ide·python·pycharm
还是鼠鼠4 小时前
Node.js 的模块作用域和 module 对象详细介绍
前端·javascript·vscode·node.js·web
jiubai_90005 小时前
nvm踩坑记录--nvm 切换node版本 node -v却不是切换的版本
linux·编辑器·vim
阿湯哥7 小时前
IDEA Reformat Code 避免将多行参数或多行方法链调用合并成一行
java·ide·intellij-idea
SZ1701102317 小时前
eclipse运行问题
java·ide·eclipse
cry10492089428 小时前
idea 2023社区版自动生成 serialVersionUID
java·ide·intellij-idea
纪伊路上盛名在9 小时前
vscode中修改快捷键
linux·ide·vscode·编辑器