VSCode使用Makefile Tools插件开发C/C++程序,VSCode使用Makefile Tools插件助力C/C++程序开发之路

马肤

温馨提示:这篇文章已超过413天没有更新,请注意相关的内容是否还可用!

摘要:使用VSCode开发C/C++程序时,通过安装Makefile Tools插件,可以极大地提高开发效率和便捷性。该插件支持Makefile文件的操作和管理,使得编译、运行和调试C/C++程序更加轻松。开发者可以方便地编写、编辑和运行Makefile文件,实现自动化构建和项目管理。利用VSCode的集成开发环境,结合Makefile Tools插件,开发者可以高效地进行C/C++程序的开发工作。

提起Makefile,可能有人会觉得它已经过时了,毕竟现在有比它更好的工具,比如CMake,XMake,Meson等等,但是在Linux下很多C/C++源码都是直接或者间接使用Makefile文件来编译项目的,可以说Makefile是基石。

另外,针对C++ 20的一些特性,像比较流行的CMake工具,目前支持还不完善,如果想要尝鲜C++ 20的一些新特性,比如Module,目前最好是使用Makefile比较方便。后面笔者会专门介绍C++ 20的Module使用。

微软官方出了一个VSCode的Makefile Tools插件,用于编译、调试、运行C/C++程序

笔者以一个简单的示例来介绍它。

如果是Windows,则需要安装MSYS2 MinGW,然后在Windows下配置PATH环境变量,包含MinGW64的gcc以及MSYS2的make路径,比如:

G:\msys64\mingw64\bin和G:\msys64\usr\bin

在工作区编写一个C++文件, main.cc:

#include 
int main(int argc, char*argv[]) {
	printf("测试\n");
	return 0;
}

再编写一个Makefile文件:

.PHONY: all clean
CC := gcc
CXX := g++
CFLAGS :=
CXXFLAGS := -gdwarf-4
Target := main
SRCS += $(wildcard *.cc)
OBJS := $(patsubst %.cc, %.o, ${SRCS})
all: $(Target)
$(Target): $(OBJS)
	$(CXX) $(CXXFLAGS) $(OBJS) -o $@
%.o: %.cc
	$(CXX) $(CXXFLAGS) -c $? -o $@
clean:
	rm -rf $(OBJS) $(Target)

在工作区编写的了Makefile后,VSCode输出窗口Makefile Tools会有一系列日志:

No current configuration is defined in the workspace state. Assuming 'Default'.
No target defined in the workspace state. Assuming 'Default'.
Dropping various extension output files at c:\Users\admin\AppData\Roaming\Code\User\workspaceStoraged677e46e192d47afa37529f2e89bbe9\ms-vscode.makefile-tools
Logging level: Normal
Configurations cached at c:\Users\admin\AppData\Roaming\Code\User\workspaceStoraged677e46e192d47afa37529f2e89bbe9\ms-vscode.makefile-tools\configurationCache.log
No path to the makefile is defined in the settings file.
No folder path to the makefile is defined in the settings file.
Always pre-configure: false
Always post-configure: false
Dry-run switches: '--always-make', '--keep-going', '--print-directory'
No current launch configuration is set in the workspace state.
Default launch configuration: MIMode = undefined,
                    miDebuggerPath = undefined,
                    stopAtEntry = undefined,
                    symbolSearchPath = undefined
Configure on open: true
Configure on edit: true
Configure after command: true
Only .PHONY targets: false
Save before build or configure: true
Build before launch: true
Clear output before build: true
Ignore directory commands: true
compile_commands.json path: null
Deduced command 'make.exe ' for configuration "Default"
The Makefile Tools extension process of configuring your project is about to run 'make --dry-run' in order to parse the output for useful information. This is needed to calculate accurate IntelliSense and targets information. Although in general 'make --dry-run' only lists (without executing) the operations 'make' would do in the current context, it is still possible some code to be executed, like $(shell) syntax in the makefile or recursive invocations of the $(MAKE) variable.
If you don't feel comfortable allowing this configure process and 'make --dry-run' to be invoked by the extension, you can chose a recent full, clean, verbose and up-to-date build log as an alternative, via the setting 'makefile.buildLog'. 

并且会弹出对话框:

VSCode使用Makefile Tools插件开发C/C++程序,VSCode使用Makefile Tools插件助力C/C++程序开发之路 第1张

点“确定”即可。

此时Makefile面板如下:

VSCode使用Makefile Tools插件开发C/C++程序,VSCode使用Makefile Tools插件助力C/C++程序开发之路 第2张

我们需要设置生成目标和启动目标,在其后点笔那个的图标按钮,则会弹出所有目标,生成目标如下,选择all

VSCode使用Makefile Tools插件开发C/C++程序,VSCode使用Makefile Tools插件助力C/C++程序开发之路 第3张

启动目标如下,只有一个,选择它:

VSCode使用Makefile Tools插件开发C/C++程序,VSCode使用Makefile Tools插件助力C/C++程序开发之路 第4张

设置好后,如下图:

VSCode使用Makefile Tools插件开发C/C++程序,VSCode使用Makefile Tools插件助力C/C++程序开发之路 第5张

右上边有三个按钮,分别是编译、调试、运行。

需要注意的是编译是使用的VSCode的shell类型任务执行的,如果如解决Windows下VSCode控制台乱码问题中所述,添加了VSCode的控制台启动参数,则可能会失败,需要去掉参数再执行,结果如下:

VSCode使用Makefile Tools插件开发C/C++程序,VSCode使用Makefile Tools插件助力C/C++程序开发之路 第6张

按调试按钮,VSCode会使用cppdbg引擎启动gdb进行调试,UTF8中文可以正常显示。

VSCode使用Makefile Tools插件开发C/C++程序,VSCode使用Makefile Tools插件助力C/C++程序开发之路 第7张


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码