基于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字段参考
综述详细版

相关推荐
信奥胡老师2 小时前
苹果电脑(mac系统)安装vscode与配置c++环境,并可以使用万能头文件全流程
c++·ide·vscode·macos·编辑器
妖灵翎幺2 小时前
C++ 中的 :: 操作符详解(一切情况)
开发语言·c++·ide
奔跑吧 android3 小时前
【vscode】【远程 ssh 开发】【环境搭建】
ide·vscode·ssh
森明帮大于黑虎帮7 小时前
Visual Studio 2008 自述文件
ide·visual studio
欧恩意7 小时前
【Visual Studio】调试时 memcpy 拷贝错误,擅自修改内存
ide·visual studio
vortex59 小时前
Visual Studio 编译选项详解
ide·visual studio
记忆偶然10 小时前
语音转文本技术方案评估与工具选型指南
ide·macos·xcode
赵域Phoenix12 小时前
快速打开jupyter
ide·jupyter
还有你Y13 小时前
VScode远程连接docker容器教程
ide·vscode·docker
汐ya~13 小时前
Cursor连接异常问题“Model not available/connection failed”解决:IDE内置代理配置,无需全局流量代理与虚拟网卡
python·编辑器·cursor