Makefile详解
原文链接:https://blog.csdn.net/qq_38646470/article/details/79917494
专栏链接:https://blog.csdn.net/column/details/20028.html
或许很多Winodws 的程序员都不知道这个东西,因为那些Windows 的IDE都为你做了这个工作,但我觉得要作一个好的和 professional 的程序员,makefile 还是要懂。在Linux 下的软件编译,你就不能不自己写makefile 了,会不会写makefile,从一个侧面说明了一个人是否具备完 成大型工程的能力。
makefile 关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile 定义了一系 列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile 就像一个Shell 脚本一样,其中也可以执行操作系统的命令。
makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。
下面就来看如何写Makefile文件:
Makefile文件编写规范:
目标:依赖文件
$^ 代表所有依赖文件
$@ 代表所有目标文件
$< 代表第一个依赖文件
% 代表通配符
@指令:屏蔽指令
定义变量(变量大写)
变量名=值1 值2 ...
使用变量 $(变量名)
下来看事例:
假设我们有很多个文件(fun1.c fun2.c fun3.c main.h)
假设最后我们就想得到main一个文件
初级版:
.PHONY : clean
main : fun1.o fun2.o fun3.o main.o
gcc -g fun1.o fun2.o fun3.o main.o -o main
fun1.o : fun1.c main.h
gcc -Wall -c -g -o fun1.o
fun2.o : fun2.c main.h
gcc -Wall -c -g -o fun2.o
fun3.o : fun3.c main.h
gcc -Wall -c -g -o fun3.o
clean :
rm -rf *.o
精简版
.PHONY : clean
FM=fun1.o fun2.o fun3.o main.o
main : $(FM)
(前面一个tab键)gcc -g $^ -o $@
%.c : %.o
(前面一个tab键)gcc -c -g - Wall $< -o $@
clean :
(前面一个tab键)rm -rf *.o
看看测试效果:
当然Makefile 还有很多其他的用处,如需更深层次了解请看makefile深度解析
唯有坚韧者始能遂其志
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端