windows使用makefile的三种方法
想再在windows上尝试makefile的可以试一试。注意需要下载好mingw、配置好gcc路径,才能成功使用make。
第1种方法只需要命令行,2、3种方法需要借助vscode实现。
当用户编译文件过多的时候,使用makefile可以帮助模块化编译文件,makefile是一个脚本文件,根据规则,来执行相应的脚本文件,实现自动化编译。学习使用makefile可以更深入地学习编译过程。虽然make方法在windows上不是主流方法,除开安装linux虚拟机,也有不少方式在windows上使用make工具。
如下是makefiel脚本和源文件结构:
具体脚本内容和Makefile内容如下:
'mian.c'
#include "stdio.h"
#include "src_a.h"
#include "src_b.h"
int main()
{
funca();
funcb();
while(1)
{
;
}
return 0;
}
#include "stdio.h"
'src_a.c'
void funca()
{
printf("funca runing!!!\r\n");
}
'src_b.c'
#include "stdio.h"
void funca()
{
printf("funca runing!!!\r\n");
}
'src_a.h'
#ifndef __SRC_A_H__
#define __SRC_A_H__
void funca();
'src_cb.h'
#endif
#ifndef __SRC_B_H__
#define __SRC_B_H__
void funcb();
#endif
'Makefile'
mian : main.o src_a.o src_b.o
gcc main.o src_a.o src_b.o -o main
main.o : main.c src_a.h src_b.h
gcc main.c -c -o main.o
src_a.o : src_a.c
gcc src_a.c -c -o src_a.o
src_b.o : src_b.c
gcc src_b.c -c -o src_b.o
.PHONY : clean
clean:
del *.o -rf
makefile语法介绍
基本语句结构:
- | - | - | - |
---|---|---|---|
target : | 依赖文件 | - | - |
编译工具(gcc) | 输出文件所需依赖 | 控制符(-g -c -o) | 输出文件名 |
- -g 可执行程序包含调试信息,目的是为了给 GDB 工具调试程序使用。
- -o 指定输出文件名,如不指定 -o,默认输出文件名为 a.out,产生执行文件。
- -c 只编译不链接,产生 .o 文件,不产生可执行文件。
可执行程序包含调试信息,目的是为了给 GDB 工具调试程序使用
1.命令行安装chocolatey,使用choco install 安装make 命令
用管理员权限启动cmd.exe,输入以下指令安装chocolatey
@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin
之后就可以用类似linux中apt-get的方式安装各种工具,此处用choco install安装make工具
choco install make
之后找到Makefile路径,使用make命令即可,最后可以运行main.exe
2.vscode中的makefile tools插件
在扩展中搜索makefile
安装后在侧边栏中会多出一个图标
然后配置tool提供的几个选项运行即可
3.配置vscode中的launch.json和tasks.json.
- launch.json中地址改为cwd地址后加"\main.exe"
- launch.json中添加最后一行"prelaunchTask:",名字与tasks.json中label保持一致
- tasks.json中command使用make
- 注意launch.json中miDebuggerPath是否是gdb
lauch.json和task.json设置教程
https://blog.csdn.net/fhqlongteng/article/details/127388105
Chocolatey安装make参考
https://juejin.cn/post/7179155710037458981