Makefile
文件命名:
makefile 或者 Makefile
Makefile规则
一个Makefile文件中可以有一个或者多个规则
目标...:依赖...
命令(Shell命令)
...
- 目标:最重要生成的文件(伪目标除外)
- 依赖:生成目标所需要的文件或是目标
- 命令:通过执行命令对依赖操作生成目标(命令前必须Tab缩进)
Makefile中的其它规则一般都是为第一条规则服务的
如果第一条规则所依赖的文件没有找到,则继续向下执行下面的规则,否则相应的规则不会执行
在执行规则中的命令时,会比较目标和依赖文件的时间
如果依赖的时间比目标的时间晚,需要重新生成目标
如果依赖的时间比目标的时间早,目标不需要更新,对应规则中的命令不需要被执行
变量
自定义变量
变量名=变量值 var=hello
预定义变量
AR:归档维护程序的名称,默认值为ar
CC:C编译器的名称,默认值为CC
CXX:C++编译器的名称,默认值为g++
$@:目标的完整名称
$<:第一个依赖文件的名称
$^:所有的依赖文件
获取变量的值
$(变量名)
应用
app:main.c a.c b.c
gcc main.c a.c. b.c -o app
等价于
//自动变量只能在规则的命令中使用
$(CC) $^ -o $@
写很多.o: .c很费劲,使用模式匹配%
%.o: %.c // %:通配符,匹配一个字符串 // 这两个%匹配的是同一个字符串 //因此上述中很多行的.o: .c可以写成一行 %.o: %.c gcc -c $^ -o $@
# 通过wildcard函数获取当前目录下所有的.c文件 # 可以写多个目录,用空格隔开 src = $(wildcard ./*.c) # 通过patsubst函数将src字符串中的%.c替换成%.o obj = $(patsubst %.c, %.o, $(src)) target = main $(target): $(obj) gcc $^ -o $@ %.o: %.c gcc -c $^ -o $@ # 用phony定义伪目标,不会与clean文件冲突 # 因为clean没有依赖文件所以只有使用make clean时才会执行 .PHONY:clean clean: rm $(obj) -f
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2019-04-18 倍增\ tarjan求lca
2019-04-18 ZOJ 4097 Rescue the Princess