在ubuntu下使用vscode打开c++的make项目及编译调试

      • 第一步:安装必要的软件
      • 第二步:示例项目准备
        • 1. 创建C++源文件: main.cpp
        • 2. 创建头文件: utils.h
        • 3. 创建实现文件: utils.cpp
      • 第三步:使用 VS Code 打开项目
      • 第四步:配置编译任务 (Tasks.json)
        • 如何使用:
      • 第五步:配置调试环境 (Launch.json)
      • 第六步:编译和调试
      • 总结
      • make对gktmm-4.0、glade-3.40.0的支持

在ubuntu下使用vscode打开c++的make项目及编译调试

第一步:安装必要的软件

打开终端 (Ctrl+Alt+T),运行以下命令以确保所有必要的工具都已安装。

bash
# 1. 更新软件包列表
sudo apt update# 2. 安装编译工具链 (g++, gdb, make)
sudo apt install build-essential gdb# 3. 安装 VS Code
# 如果尚未安装,可以从 Snap 安装(最简单)
sudo snap install --classic code
# 或者从微软官方仓库安装,具体方法请参考微软官网

验证安装:

g++ --version
make --version
gdb --version

如果这些命令都输出了版本信息,说明工具链已正确安装。

第二步:示例项目准备

为了演示,我们创建一个简单的示例项目。如果您已有项目,可以跳过此步。

在您喜欢的位置(例如 ~/Documents/)创建一个新目录并生成文件:

mkdir my_make_project
cd my_make_project
1. 创建C++源文件: main.cpp
#include <iostream>
#include "utils.h"int main() {std::cout << "Hello from the main program!" << std::endl;utils::printMessage("This is a message from the utils module.");int result = utils::add(5, 3);std::cout << "The result of addition is: " << result << std::endl;return 0;
}
2. 创建头文件: utils.h
#ifndef UTILS_H
#define UTILS_Hnamespace utils {void printMessage(const char* message);int add(int a, int b);
}#endif
3. 创建实现文件: utils.cpp
#include "utils.h"
#include <iostream>namespace utils {void printMessage(const char* message) {std::cout << "Message: " << message << std::endl;}int add(int a, int b) {return a + b;}
}
  1. 创建 Makefile

这是最关键的一步,它定义了如何编译项目。

# 编译器设置
CXX := g++
CXXFLAGS :=  -Wall -g -std=c++11# 目标可执行文件名称
TARGET := myapp# 源文件和对象文件
SRCS := main.cpp utils.cpp
OBJS := $(SRCS:.cpp=.o)# 默认目标:编译所有
all: $(TARGET)# 链接目标文件生成可执行文件
$(TARGET): $(OBJS)$(CXX) $(CXXFLAGS) -o $@ $^# 编译 .cpp 文件为 .o 文件
%.o: %.cpp$(CXX) $(CXXFLAGS) -c $< -o $@# 清理生成的文件
clean:rm -f $(OBJS) $(TARGET)# 声明伪目标,防止有同名文件时出错
.PHONY: all clean

关键点:

-g:在可执行文件中包含调试信息,这是调试所必需的。

-Wall:开启大多数警告。

-std=c++11:指定 C++ 语言标准。

现在您的项目结构应如下所示:

my_make_project/
├── main.cpp
├── utils.h
├── utils.cpp
└── Makefile

第三步:使用 VS Code 打开项目

  1. 打开 VS Code。
  2. 点击 File -> Open Folder…
  3. 选择您刚刚创建的 my_make_project 文件夹并点击 Open

VS Code 现在将把这个文件夹作为您的工作区。

第四步:配置编译任务 (Tasks.json)

VS Code 可以使用任务 (Tasks) 来调用外部命令,比如 make

  1. 打开命令面板:Ctrl+Shift+P
  2. 输入并选择 Tasks: Configure Task
  3. 接着选择 Create tasks.json file from template
  4. 然后选择 Others 来创建一个通用模板。

VS Code 会在项目根目录下创建一个 .vscode 文件夹,并在其中生成一个 tasks.json 文件。用以下内容替换该文件:

json

{"version": "2.0.0","tasks": [{"label": "Build with Make", // 任务的自定义名称"type": "shell","command": "make",          // 或 "cd ./linux64/proj && make" 直接在 shell 中运行的命令"group": {"kind": "build","isDefault": true       // 将此任务设为默认生成任务},"presentation": {"echo": true,"reveal": "always",     // 总是显示输出窗口"focus": false,"panel": "shared"},"problemMatcher": "$gcc"    // 使用 GCC 的问题匹配器来捕捉错误和警告},{"label": "Clean with Make","type": "shell","command": "make", // 或 "cd ./linux64/proj && make""args": ["clean"]           // 执行 `make clean` 命令}]
}
如何使用:

编译:按 Ctrl+Shift+B。因为我们将任务设置为默认生成任务,所以这会直接运行 make

清理:打开命令面板 (Ctrl+Shift+P),输入 Tasks: Run Task,然后选择 Clean with Make

第五步:配置调试环境 (Launch.json)

这是设置调试的关键。

  1. 点击 VS Code 左侧活动栏的 “运行和调试” 图标(或按 Ctrl+Shift+D)。
  2. 点击 “创建一个 launch.json 文件”。
  3. 在弹出的环境中,选择 C++ (GDB/LLDB)

同样,VS Code 会在 .vscode 文件夹下创建 launch.json 文件。用以下内容替换:

json

{"version": "0.2.0","configurations": [{"name": "(gdb) Launch",       // 配置的名称"type": "cppdbg","request": "launch","program": "${workspaceFolder}/lib/sdkTest", // 需要调试的程序路径"args": [],                   // 传递给程序的命令行参数"stopAtEntry": false,"cwd": "${workspaceFolder}/lib",  // 工作目录 必须跟上部“调试的程序路径”一致"environment": [],"externalConsole": false,     // 使用 VS Code 的内置终端"MIMode": "gdb","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "Build with Make" // 在启动调试前先执行的任务}]
}

关键配置解释:
“program”: 必须与您的 MakefileTARGET 的名字一致。这里是 myapp

“preLaunchTask”: 必须与 tasks.json 中定义的编译任务的 “label”(这里是 “Build with Make”)一致。这确保了每次开始调试时,VS Code 都会先自动重新编译项目(如果源代码有改动)。

第六步:编译和调试

现在一切就绪!

编译:按 Ctrl+Shift+B。您会在终端看到 make 命令的输出。如果编译成功,将生成 myapp 可执行文件。

设置断点:在代码编辑器中,在您想暂停执行的行号左侧点击鼠标(例如在 main.cpp 的第 6 行 std::cout… 旁边点击),会出现一个红点。

开始调试:按 F5 或点击“运行和调试”视图中的绿色播放按钮。

VS Code 会首先自动执行 “Build with Make” 任务来编译代码。

然后启动调试器,程序会在您设置的断点处暂停。

调试控制:

  • Step Over (F10):执行下一行代码。
  • Step Into (F11):进入函数内部。
  • Step Out (Shift+F11):跳出当前函数。
  • Continue (F5):继续运行直到下一个断点。
  • 左侧调试窗口可以查看变量、调用堆栈监视表达式

总结

通过以上步骤,您已经在 Ubuntu 上的 VS Code 中成功配置了一个基于 Makefile 的 C++ 项目的完整开发环境,包括:

  1. 一键编译 (Ctrl+Shift+B)
  2. 一键调试 (F5),并支持断点、单步执行、变量查看等所有现代调试功能。

这个工作流对于绝大多数中小型 C/C++ 项目来说都非常高效。对于更复杂的项目,您可能需要调整 Makefiletasks.json 中的参数,但核心配置思路是完全一致的。

make对gktmm-4.0、glade-3.40.0的支持

# 添加gtkmm-4.0相关头文件路径
GTKMM_CFLAGS := $(shell pkg-config --cflags gtkmm-4.0)
INCPATHS += $(GTKMM_CFLAGS)# 添加gtkmm-4.0相关链接库
GTKMM_LIBS := $(shell pkg-config --libs gtkmm-4.0)
LIBS += $(GTKMM_LIBS)all:$(EXE)#gktmm-4.0 不支持.glade文件的<packing>标记 给预删除sed -i '/<packing>/,/<\/packing>/d' ../lib/basic.glade
$(EXE):$(OBJFILE)$(CXX) -L$(LIBPATH)  -o $(EXE) $(OBJFILE) $(INCPATHS) $(LIBS)
$(OBJFILE):%.o:%.cpp$(CXX)  -c -o $@ $<  $(INCPATHS) -pipe -g -Wall

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94458.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94458.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/94458.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3-2.Python 函数 - None(None 概述、None 应用场景)

一、None 概述在 Python 中&#xff0c;None 是一个特殊的常量&#xff0c;用于表示空值或无值None 是 Python 中唯一的一个 NoneType 类型的实例二、None 应用场景 1、定义变量 None 常用于初始化变量&#xff0c;表示该变量暂时不需要有具体值 name Noneprint(name) print(t…

js获取html元素并设置高度为100vh-键盘高度

获取HTML元素并设置高度为(100vh - 键盘高度) 我将设计一个页面&#xff0c;展示如何获取HTML元素并动态设置其高度为视口高度减去键盘高度&#xff0c;这在移动设备上特别有用&#xff0c;可以避免键盘遮挡内容。 设计思路 创建一个带有输入框的界面&#xff0c;模拟键盘弹…

基于SpringBoot的校园博客管理系统

&#x1f517; 目录 一. 前言   二. 前端框架、后端框架以及存储框架使用情况说明   三. 核心技术     1. ✅Java开发语言     2. ✅MyBatis     3. ✅Mysql     4. ✅Vue     5. ✅部署项目   四. 演示效果     1. 管理员功能模块       …

Nginx + Certbot配置 HTTPS / SSL 证书

前提条件&#xff1a; 1.已有域名 2.Nginx 已安装并正在运行&#xff0c;且有对应的 Server 配置 3.防火墙开放 80 和 443 端口 安装 EPEL 仓库&#xff1a; sudo yum install epel-release -y安装 Snapd sudo yum install snapd -y启用并启动 Snapd Socket sudo systemctl ena…

图结构使用 Louvain 社区检测算法进行分组

图结构使用 Louvain 社区检测算法进行分组 flyfish Louvain 算法是一种基于模块度最大化的社区检测算法&#xff0c;核心目标是在复杂网络中找到“内部连接紧密、外部连接稀疏”的社区结构。它的优势在于高效性&#xff08;可处理百万级节点的大规模网络&#xff09;和近似最优…

layui.formSelects自定义多选组件在layer.open中使用、获取、复现

layui.formSelects自定义多选组件在layer.open中使用、获取、复现 引入css和js //<th:block th:include"include :: layui-formSelects-css"/> <link th:href"{/ajax/libs/layui-formSelects/formSelects-v4.css}" rel"stylesheet"/>…

基于SpringBoot的社团管理系统【2026最新】

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

运行node18报错

又碰到一个奇葩的问题&#xff0c;报错如下> tigermes.vue30.1.0 serve > vue-cli-service serveBrowserslist: caniuse-lite is outdated. Please run:npx update-browserslist-dblatestWhy you should do it regularly: https://github.com/browserslist/update-db#rea…

Python第三方库IPFS-API使用详解:构建去中心化应用的完整指南

目录 Python第三方库IPFS-API使用详解&#xff1a;构建去中心化应用的完整指南 引言&#xff1a;IPFS与去中心化存储的革命 星际文件系统&#xff08;IPFS&#xff0c;InterPlanetary File System&#xff09;是一种革命性的点对点超媒体协议&#xff0c;旨在创建持久且分布式的…

ETL与iPaaS的融合方案:加速数据集成流程

在今天的商业世界里&#xff0c;数据几乎无处不在。企业每天都在产生和接收海量的数据——从CRM到ERP&#xff0c;从云端SaaS应用到本地数据库&#xff0c;来源越来越分散&#xff0c;集成也越来越复杂。 传统的ETL工具&#xff08;提取、转换、加载&#xff09;在处理结构化数…

详解flink SQL基础(四)

文章目录1.Flink SQL介绍2.streaming SQL&watermarks使用3.窗口聚合&#xff08;window aggregations&#xff09;4.over aggregations5.FlinkSQL 流连接&#xff08;Streaming join&#xff09;6.使用MATCH_RECOGNIZE 进行模式识别和复杂事件处理7.变更记录&#xff08;ch…

有鹿机器人:为城市描绘清洁新图景的智能使者

一、智慧清洁&#xff1a;科技赋能的环境革新每天清晨&#xff0c;当我沿着小区路径缓缓行驶&#xff0c;双激光雷达系统便开始精准测绘环境。我的专业清扫能力源自2cm精度死亡贴边技术&#xff0c;这项让同行惊叹的能力&#xff0c;可以轻松震出嵌了十年的烟头&#xff0c;彻底…

Tableau Server高危漏洞允许攻击者上传任意恶意文件

Tableau Server 存在一个严重安全漏洞&#xff0c;可能允许攻击者上传并执行恶意文件&#xff0c;最终导致系统完全沦陷。该漏洞编号为 CVE-2025-26496&#xff0c;CVSS 评分为 9.6 分&#xff0c;影响 Windows 和 Linux 平台上的多个 Tableau Server 和 Tableau Desktop 版本。…

数据结构07(Java)-- (堆,大根堆,堆排序)

前言 本文为本小白&#x1f92f;学习数据结构的笔记&#xff0c;将以算法题为导向&#xff0c;向大家更清晰的介绍数据结构相关知识&#xff08;算法题都出自&#x1f64c;B站马士兵教育——左老师的课程&#xff0c;讲的很好&#xff0c;对于想入门刷题的人很有帮助&#x1f4…

onnx入门教程(七)——如何添加 TensorRT 自定义算子

在前面的模型入门系列文章中&#xff0c;我们介绍了部署一个 PyTorch 模型到推理后端&#xff0c;如 ONNXRuntime&#xff0c;这其中可能遇到很多工程性的问题。有些可以通过创建 ONNX 节点来解决&#xff0c;该节点仍然使用后端原生的实现进行推理。而有些无法导出到后端的算法…

YggJS RButton 按钮组件 v1.0.0 使用教程

&#x1f4cb; 目录 简介核心特性快速开始安装指南基础使用主题系统高级功能API 参考最佳实践性能优化故障排除总结 &#x1f680; 简介 YggJS RButton 是一个专门为 React 应用程序设计的高性能按钮组件库。它提供了两套完整的设计主题&#xff1a;科技风主题和极简主题&…

Linux(二十)——SELinux 概述与状态切换

文章目录前言一、SELinux 概述1.1 SELinux 简介1.2 SELinux 特点1.2.1 MAC&#xff08;Mandatory Access Control&#xff09;1.2.2 RBAC&#xff08;Role-Based Access Control&#xff09;1.2.3 TE&#xff08;Type Enforcement&#xff09;1.3 SELinux 的执行模式1.4 SELinu…

Linux学习-TCP网络协议(补充)

一、TCP 头部标志位 TCP 头部包含多种标志位&#xff0c;用于控制连接建立、数据传输、连接断开等过程&#xff0c;核心标志位及作用如下&#xff1a;标志位英文全称作用SYNSynchronize Sequence Numbers请求建立连接&#xff0c;三次握手第一步发送 SYN 包ACKAcknowledgment响…

Go编写的轻量文件监控器. 可以监控终端上指定文件夹内的变化, 阻止删除,修改,新增操作. 可以用于AWD比赛或者终端应急响应

工具介绍 0RAYS-AWD-Filechecker一个用Golang编写的, 轻量级的文件监控器, 会监控指定文件夹内文件删除, 修改, 新增操作, 然后立刻告警并复原. 一开始是为AWD比赛写的, 主要是为了防止靶机的web目录被上马. 但也可以用到蓝队等场景上. 由于使用的Linux的系统调用, 仅支持Linux…

【6】MySQL 数据库基础操作

MySQL 数据库基础操作数据库操作查看数据库创建数据库删除数据库修改数据库数据表操作创建表修改表删除表数据库操作 查看数据库 查看有哪些数据库&#xff1f; 示例&#xff1a; [rootlocalhost][(none)]> show databases; -------------------- | Database |…