VSCode编译调试复杂C/C++项目

VSCode配置指南:高效编译调试复杂C/C++项目 在C/C++开发中,集成开发环境(IDE)的选择直接影响项目构建与调试的效率。传统重型IDE虽然功能全面,但在处理结构复杂、依赖众多的遗留项目时,常因索引缓慢、配置僵化而影响开发体验。其核心原理在于将编译、调试等核心功能与编辑器深度耦合,导致灵活性不足。相比之下,轻量级编辑器配合模块化插件,通过解耦前端界面与后端工具链,实现了更高的定制性。这种模式的技术价值在于,开发者可以完全复用项目原有的构建系统(如GNU Make),同时获得现代化的代码智能感知和可视化调试界面,尤其适合嵌入式Linux、交叉编译等非标 阅读详情
AI摘要

本文介绍如何在VSCode中搭建C/C++开发环境,包括安装编译器、配置项目目录、创建Makefile以及设置VSCode的任务和调试。

一、前言

今天用VS2019写项目的时候,突然给我疯狂报错,说运行时"DLL Initialization failed",我这项目完全没有任何动态库依赖,那意思你Windows自己的kernel都加载不好呗。

一气之下我决定换vscode写了,反正前端部分也是用vscode,后端能统一那是最好,查了半天,配置了一通终于搞好了,这里记录一下,也方便大家少走弯路。

二、安装编译器

VSCode本身只是一个编辑器,它是没有能力进行编译和调试的,所以需要额外装一个编译器。这里我推荐使用TDM_GCC,原因无他,一个安装包就全搞定了(记得让它自己添加环境变量),比MinGW方便点。Linux下你直接apt装一个g++就可以了。

这里安装结束后还需要做一个小修改,到TDM-GCC-64\bin中找到mingw32-make.exe,把它重命名成make.exe,这样是为了和Linux下指令统一。

三、创建项目目录

创建项目时,结构清晰总是没有错的。按照我个人的习惯,会把项目目录建成下面的格式:

├── include
├── src
├── lib
├── test
└── output
  1. include,用于存放所有头文件
  2. src,用于存放所有源文件
  3. lib,用于存放可能的动态链接库
  4. test,用于存放测试脚本
  5. output,用于存放编译后的可执行文件

四、Makefile

“Building Tool is The Key”,Makefile就是我选择的构建工具。虽然一般复杂一些的项目都是用CMake,但是作为Linux自带,GCC附带的make工具足够我们平时的项目使用了。

下面我给出一份Linux和Windows(需要安装TDM_GCC)通用的Makefile文件:

#
# 'make'        build executable file 'main'
# 'make clean'  removes all .o files
# 'make clean_all' removes all .o and executable files

# define debug/release mode
ver = release

# define Platform Architecture(32/64)
ARCH := 64

# define the Cpp compiler to use
CXX := g++

# define any compile-time flags
ifeq ($(ver), release)
CXXFLAGS	:= -std=c++17 -O3
else
CXXFLAGS	:= -std=c++17 -Werror -g
endif

# define library paths in addition to /usr/lib
#   if I wanted to include libraries not in /usr/lib I'd specify
#   their path using -Lpath, something like:
LFLAGS =

# define program name
PROGRAM	:= main

# define output directory
OUTPUT	:= output

# define source directory
SRC		:= src

# define include directory
INCLUDE	:= include

# define lib directory
LIB		:= lib/lib$(ARCH)

ifeq ($(OS),Windows_NT)
MAIN	:= $(PROGRAM).exe
SOURCEDIRS	:= $(SRC) $(shell powershell "Get-ChildItem -Path $(SRC) -Recurse -Directory | Select-Object FullName")
INCLUDEDIRS	:= $(INCLUDE)
LIBDIRS		:= $(LIB)/win
FIXPATH = $(subst /,\,$1)
RM			:= del /q /f
MD	:= mkdir
else
MAIN	:= $(PROGRAM)
SOURCEDIRS	:= $(shell find $(SRC) -type d)
INCLUDEDIRS	:= $(shell find $(INCLUDE) -type d)
LIBDIRS		:= $(shell find $(LIB)/linux -type d)
FIXPATH = $1
RM = rm -f
MD	:= mkdir -p
endif

# define any directories containing header files other than /usr/include
INCLUDES	:= $(patsubst %,-I%, $(INCLUDEDIRS:%/=%))

# define the C libs
LIBS		:= $(patsubst %,-L%, $(LIBDIRS:%/=%)) $(patsubst $(LIBDIRS)/lib%.a,-l%, $(wildcard $(LIBDIRS)/*.a)) 

# define the C source files
SOURCES		:= $(wildcard $(patsubst %,%/*.cpp, $(SOURCEDIRS)))

# define the C object files 
OBJECTS		:= $(SOURCES:.cpp=.o)

#
# The following part of the makefile is generic; it can be used to 
# build any executable just by changing the definitions above and by
# deleting dependencies appended to the file from 'make depend'
#

OUTPUTMAIN	:= $(call FIXPATH,$(OUTPUT)/$(MAIN))

all: $(OUTPUT) $(MAIN)
	@echo Executing 'all' complete!

$(OUTPUT):
	$(MD) $(OUTPUT)

$(MAIN): $(OBJECTS) 
	$(CXX) $(CXXFLAGS) $(INCLUDES) -o $(OUTPUTMAIN) $(OBJECTS) $(LFLAGS) $(LIBS)

# this is a suffix replacement rule for building .o's from .c's
# it uses automatic variables $<: the name of the prerequisite of
# the rule(a .c file) and $@: the name of the target of the rule (a .o file) 
# (see the gnu make manual section about automatic variables)
.cpp.o:
	$(CXX) $(CXXFLAGS) $(INCLUDES) -c $<  -o $@

.PHONY: clean clean_all
clean:
	$(RM) $(call FIXPATH,$(OBJECTS))
	@echo Cleanup .o files complete!

clean_all:
	$(RM) $(OUTPUTMAIN)
	$(RM) $(call FIXPATH,$(OBJECTS))
	@echo Cleanup all complete!

run: all
	./$(OUTPUTMAIN)
	@echo Executing 'run: all' complete!

这份Makefile文件是完全对应之前的项目结构,支持src和Include中继续设置子目录。

  1. make (ver=release/debug)。构建项目,默认以release模式构建
  2. make clean。删除所有生成的.o文件
  3. make clean_all。删除所有生成的文件
  4. make run。编译并运行生成的可执行文件

五、VSCode设置

请确认安装了C/C++插件

5.1 tasks.json

VSCode虽然不能编译代码,但是它可以执行脚本,也就是自带的Task Runner,我们就是基于此来实现编译调试。

首先ctrl+shift+p调出命令栏,输入task,应该可以看到任务:配置任务,回车之后会让你选择模板(取决于你当前打开的文件),我们不需要,随便选生成tasks.json文件即可。打开替换成以下内容:

{
    "tasks": [
        {
            "type": "shell",
            "label": "build",
            "command": "make ver=debug -j4",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": "$gcc"
        },
    ],
    "version": "2.0.0"
}

这个文件是用来自定义任务的,我们这里定义了:

  1. label:一个叫做“build”的任务
  2. type:这是一个用命令行(shell)执行的任务
  3. command:它执行的指令是"make ver=debug -j4"。也就是以debug模式编译,-j4是启用四个线程,可以加快编译速度
  4. group:这个是用来配合快捷键的,当kind设置为"build"后,你可以用ctrl+shift+b快速构建
  5. problemMatcher:当你的命令执行并报错后,将交由gcc负责处理并转发到VSCode的Problems界面。

5.2 launch.json

任务定义好之后需要有人来执行,VSCode左侧菜单栏的第四项Debug点击后,可以创建launch.json文件。同样的,随便选模板,替换为以下内容:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/output/main.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "E:\\Develop\\TDM-GCC-64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build"
        }
    ]
}

这里我们定义了按下F5之后运行的流程:

  1. name:启动的是脚本名叫"(gdb) Launch"
  2. type:cppdbg,cpp debug
  3. program:启动的文件,这里你需要给出你自己设定的可执行文件名字(我这儿给的main.cpp)。
  4. MIMode:gdb。如果你需要Debug,那么这里必须设置,支持gdb和lldb。
  5. miDebuggerPath:请修改为你自己的gdb所在路径
  6. preLaunchTask:意思是在启动program之前,先要做什么,那肯定需要先编译啊,所以我们给了上面tasks中设置的任务名,“build”。

六、Go!

好了,此时你只需要按下F5,或者在顶部菜单中选:运行->启动调试,就大功告成了。

Debug实例

七、注意

  1. 如果用VSCode作为C/C++的编程环境,一些编辑器相关的问题,比如额外的IncludePath,需要在ctrl+shift+p,寻找C/C++: 编辑配置(JSON),然后修改。
  2. GDB在Windows下不支持动态断点,也就是说你需要先打好断点,再F5启动,否则是断不住的。

八、参考

  1. Setup Visual Studio Code for Multi-File C++ Projects
  2. Debug a C++ project in VS Code
vscode + cmake 链接第三方库dll编译c++成exe文件 一、下载插件 装好CMake和CMake tools之后,vscode下方会有Build和CMake【Debug】 二、项目目录 settings.json文件中加入cmake的path { "clang.cflags":[ "-I${workspaceRoot}/include" ], "python.pythonPath": "D:\\AppData\\anaconda3\\python.exe", "C_Cpp.upd... 阅读详情

相关推荐

vscode 实现代码编译

vscode 实现代码编译 之前一直纠结用vascode的编译按钮实现编译,这样就需要额外配置json文件,会非常麻烦,其实vscode也支持用编译命令,具体步骤如下:新建makefile文件,文件内容如下: target: gcc *.c -o run.exe ./run.exe 其中run是要生成的exe文件名称;点击页面“+”,选择Power shell或Git Bash; 终端输入make指令,即可实现运行;你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

zjn15000的博客 4808

【VSCode教程】 C++第一个DLL、远离手动GCC、快速自动生成、来 say_helloヽ(^o^)丿

【演示视频已上线】演示从 0 开始全自动配置 C++ DLL 静态或动态库的详细过程。自动初始化CMake 和 .cpp、 自动生成编译任务Tasks.json、编译工程、运行调用第一个执行程序。

莺时桃桃的 Debug 日常 3万+

VSCode安装、配置环境、编译运行C/C++新手详细教程

步骤 安装VSCode 在VSCode内安装c/c++插件 安装编译、调试环境 1.安装VSCode 软件我已经下载好了放在网盘里,你可以直接点击下载。若系统不符合,可以去原地址下载,只是速度会慢很多。 注意1:安装的时候一定要注意,安装路径默认或者自定义都可以,但是最好记住该路径,以后配置文件会用到。 ![image.png](https://img-service.csdnimg.cn/img_convert/1fb0bc385a9a0ea70870db4df5c5944d.png#align

专注当下,持续进步。 2802

VSCODE+MSVC+CMAKE配置实践入门:简单编写EXE、LIB和DLL

VSCODE 配置MSVC工具链的实践,包括EXE、LIB、DLL和预编译文件,使用task、cl.exe和CMAKE

Zhenghaowen优快云的博客 1万+

在Linux上使用vscode编译调试C/C++代码

最近看到不少同事,在linux下搬砖C/C++的姿势有点辛苦,把VS Code用成了一个纯粹的编辑器,所以想着是不是可以用更优雅一些的姿势搬砖,尤其是debug。然而,发现如果我们用CMake来组织工程(因为我们已经大量的使用了CMake文件来组织工程),那么就不只是涉及vscode设置的问题。 目录需要用到的东西一、简单编译二、使用步骤1.引入库2.读入数据总结 主要参考如下链接(官方文档): Using C++ on Linux in VS Code(https://code.visualstudio.

KISS人生 2341

C++ 之动态链接库DLL使用注意事项及C#调用详解

C++ 之动态链接库DLL使用注意事项及C#调用详解

yohnyang的博客 2382

vscode添加源文件_如何用vs code写c语言项目(多个文件,源文件和头文件)?

C/C++ 可以一条命令编译多个源文件gcc -o program.exe a.c b.c c.c d.c你可以在 tasks.json 里面把这样的命令敲进去"command": "gcc","args": ["-o","program.exe","a.c","b.c","c.c","d.c"]然而如果你的源文件数比较多,或者源文件分布在多个目录下,生成的可执行程序也要放入另一个目录。这种方式就...

weixin_34051133的博客 3395

VSCode下C/C++多文件分目录编译配置与操作示例

调试配置文件是Visual Studio Code中用于定义如何启动和连接调试器的关键组件。它允许开发者针对不同的环境和需求设置特定的调试参数。通过编辑文件,开发者可以轻松地切换不同的调试配置,无论是本地开发、远程服务器还是特定的测试环境。为了提高工作效率,可以为常用的终端命令设置快捷任务或者别名。在文件中添加如下配置可以创建快捷任务:之后你可以通过快捷键或命令面板运行这个任务,快速编译当前文件。

weixin_36238982的博客 1508

vscode对python、c++ debug设置

ptyhon、c++ 在vscode进行debug

求学者 790

VSCode下C/C++分文件、分目录项目编译环境配置大全

在C/C++开发中,一个清晰的项目目录结构是维护复杂项目的基础。它有助于组织源代码文件、头文件、库文件以及构建脚本等资源。良好的项目结构不仅使得新团队成员能更快地上手项目,还便于进行版本控制和代码维护。随着项目的扩展,合理的目录结构可以确保代码的可读性和可维护性,减少编译时间,并且有助于团队分工合作。Code Runner是一个被广泛使用的VSCode扩展,它允许开发者直接从编辑器内部运行代码。

weixin_28721743的博客 1014

DISM错误87详解:RestoreHealth选项无法识别的修复方法

DISM(部署映像服务和管理工具)是Windows系统维护与修复的核心命令行工具,常与SFC(系统文件检查器)配合使用,用于扫描和修复组件存储损坏、系统文件缺失等问题。在执行系统健康检查时,用户常会遭遇错误87,提示“未在此上下文中识别出restorehealth选项”。该错误的本质并非工具损坏,而是命令参数结构不符合DISM的语法解析规则,或当前系统环境(如Windows 7、WinRE/PE、32位环境)不支持该参数。理解DISM的命令层级、参数挂载关系以及运行上下文,是精准排除故障的前提。通过核对标准

weixin_34116482的博客 454

如何在 Windows 上调试 Python 的 C 扩展

3. 在VSCode中打开你的项目,然后在左侧的Explorer视图中右键点击你的`.c`文件,选择"Configure for C/C++",然后选择"Add Configuration..."。在弹出的对话框中,选择"Windows",然后点击"Create".VSCode会自动生成一个`.vscode/c_cpp_properties.json`文件,其中包含了编译和链接你的C代码所需的配置。例如,你可能需要处理一些复杂的C语言语法和库函数,或者你需要在多个Python文件中定义你的C扩展。

551

Android keymint(keymaster)一RKP

Android RKP

weixin_47139576的博客 1万+

VSCode配置全攻略:tasks.json与launch.json征服复杂C/C++项目

在C/C++开发中,集成开发环境(IDE)通过整合代码编辑、编译构建和调试功能,极大提升了开发效率。其核心原理在于将编译器、调试器等工具链与编辑器前端无缝连接,实现代码智能感知和图形化调试。对于复杂项目,这种集成能有效管理非标准项目结构、多目标构建和自定义脚本,技术价值在于提供统一、可定制且高效的工作流。Visual Studio Code(VSCode)凭借其轻量化和强大的插件生态,成为实现这一目标的流行选择。通过深度配置tasks.json(负责构建)和launch.json(负责调试)这两个核心文件,

congdi7904的博客 469

避开这5个坑!用MATLAB做核密度估计时90%人会犯的错误

本文详细解析了使用MATLAB进行核密度估计时常见的5个高频错误,包括三维数据可视化、带宽参数优化、大数据量处理、核函数选择及版本兼容性问题。特别针对核密度估计中的关键参数带宽(bandwidth)提供了数据驱动的优化策略,帮助用户提升分析精度与效率。

jenkins8butler的博客 277

独立游戏开发者的新武器:实测腾讯混元3D自动绑骨,搭配Mixamo让角色动画制作效率翻倍

本文实测腾讯混元3D自动绑骨功能与Mixamo动画库的协同使用,显著提升独立游戏开发者的角色动画制作效率。通过解决卡通角色绑骨偏差、优化骨骼权重及动画状态机配置,使原本两周的流程缩短至三天,并分享Unity中的性能优化与版权合规要点。

weixin_42662605的博客 483

基于VScode的C/C++环境搭建

本文介绍了在VSCode中搭建C/C++开发环境的方法。相比臃肿的Visual Studio,推荐使用轻量级的VSCode配合MinGW编译器。详细讲解了单文件和多文件的编译调试方法,包括gcc命令使用和CMake项目管理。重点说明了CMakeLists.txt编写、调试配置(launch.json)以及Ninja构建工具的使用技巧。还介绍了基于Clangd的语法检查方案,对比了GDB和LLDB调试器的差异。文章为初学者提供了从简单到复杂的完整开发环境配置指南,适合不同规模项目的需求。

qq_59757948的博客 560

海思方案定制hi3531dv200/SS528 DVR方案解析:从硬件选型到编解码实战应用

海思方案,Hi3518EV100,Hi3518CV100,Hi3515CV100,Hi3516CV100,Hi3516ECV100,Hi3516D,Hi3516A,Hi3519,Hi3520D,Hi3521A,Hi3535,Hi3531,Hi3536,Hi3536C,Hi3536D,Hi3518EV200,Hi3518EV201,Hi3520DV200,Hi3516CV200,Hi3516CV300,Hi3516AV200,Hi3520DV300,Hi3519V101,sd3403,hi3519av200

1582

VSCode 使用教程--编写调试C/C++程序

一、前言   Visual Studio Code是一个轻量且强大的代码编辑器,支持Windows,OS X和Linux。内置JavaScript、TypeScript和Node.js支持,而且拥有丰富的插件生态系统,可通过安装插件来支持C++、C#、Python、PHP等其他语言。   作为一款优秀的编辑器我们就来了解一下他吧。 二、安装C/C++插件  &emsp ...

小小小白的博客 4万+

1、Ka频段双极化低剖面卫通相控阵天线

设计了双馈口叠层十字缝隙耦合天线,采用“双线极化天线 +旋转馈电 + 移相控制”架构,采用双馈口的叠层十字缝隙耦合天线,并以 2 x2 阵列为主体,旋转排布实现二次圆极化,同时极化可切换,通过多层 PCB 工艺实现天线层、控制/电源层功分网终层、芯片层一体化集成,研制出 64 阵元的圆极化可切换发射天线,测试结果表明:天线工作 频段为 27.5 ~31 GHz,可实现60°扫描,法向轴比

qq_43416206的博客 4366

【Google Play 上架】内部 / 封闭 / 开放 测试全解 — “只跑一个就能上架”?不行!

Google Play新规要求个人开发者账号在2023年11月13日后必须通过封闭测试(Closed testing)才能上架应用。封闭测试需要至少12名测试者连续14天保持参与状态,而内部测试和开放测试不能替代这一要求。三类测试轨道各有特点:内部测试用于快速内部验证,封闭测试是上架必经环节,开放测试面向更广泛用户但非必需。上架流程建议先内部测试修复问题,再启动封闭测试满足14天要求,最后申请生产发布。组织账号和早期个人账号可能不受此限制。开发者应提前规划测试人群,确保持续测试周期,并关注Play Cons

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 2789

VSCode C/C++ 编译调试

在 Linux 系统下,C/C++的调试通常使用gdb进行调试。 https://www.cnblogs.com/jiaxblog/p/9902535.html

Muti-Agent 3812

机器学习分类算法之XGBoost(集成学习算法)

目录 走进XGBoost 什么是XGBoost? XGBoost树的定义 XGBoost核心算法 正则项:树的复杂程度 XGBoost与GBDT有什么不同 XGBoost需要注意的点 XGBoost重要参数详解 调参步骤及思想 XGBoost代码案例 相关性分析 n_estimators(学习曲线) max_depth(学习曲线) 调整max_depth 和min_child_weight 调整gamma 调整subsample 和colsample_bytree 调整正则

迷茫与徘徊只会让你陷入绝境,欢迎私信博主,带你开始提升变现价值! 11万+

在 VSCode 上如何修改 json 配置文件,从而构建调试 C/C++ 项目

本文介绍如何通过更改配置文件,如何对tasks.json,settings.json,launch.json,c_cpp_properties.json进行修改,从而在 VSCode 上构建调试 C/C++ 项目。 同时能够解决的一些问题:头文件未包含而导致的未定义;头文件未能被识别而显示的提示错误等问题。

2301_76891342的博客 3401

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

用VSCode和CMake编写调试C/C++

这篇文章的首要目的是,通过配置VSCode,达到全平台的一致C/C++开发体验。 对于编写C/C++的环境,我们至少需要有文本编辑器、C/C++编译器,最好还能有C/C++调试器。 VSCode本质上是一个文本编辑器,但是它有丰富的插件生态,通过插件我们可以对C/C++程序进行调试。而且,它拥有可自定义的任务系统,通过任务,可以封装一些操作,化繁为简。 如果谈编译器和调试器的话,一般来讲,这两个东西是成双成对的,由gcc和g++编译的程序,使用gdb进行调试,由clang编译的程序使用lldb进行..

yaohl0911的博客 2629

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

04. VSCODE:C/C++简捷项目专用配置

手把手完成专用于简捷C/C++项目的VSCODE配置。同时从根子上理解及解决C/C++程序运行、调试、输入、输出可能会碰上的乱码问题。

第2学堂-专栏 2425
上一篇: 【李宏毅机器学习笔记】BP算法
下一篇: 想让VSCode识别自己的编程语言?立马安排
Morphlng
博客等级 码龄8年 1157粉丝 41原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值