GNU make 比想象中的强大 - 哆啦比猫的技术瞎扯 - Arch Linux · ドラえもん · 实时绘制
GNU make 比想象中的强大
一直想找一个替代 make 的工具,因为想要自动分析依赖。兜了一圈后又回到了 make,why?因为 make 其实完全可以做到自动分析依赖(当然要借助 gcc 咯),后悔当初没有仔细学习 GNU make 啊喵~
语法
文件名后缀替换
这个可能很多人知道(但我却才知道……),就是:
SRC = a.c b.c c.c d.c OBJ = $(SRC:.c=.o) # -> a.o b.o c.o d.o
通配符展开
$(wildcard *.c) # -> 展开为目录下所有匹配 *.c 的文件的列表
自定义通用规则
这个知道的人应该也很多:
.c.o: # 从 .c 文件得到 .o 文件的通用规则 gcc -c -o $@ $< # $@是目标,$<为依赖中的第一个
执行 shell 命令并取回结果
$(shell ls) # 这个和 `ls` 一样?
把字符串内容当做 makefile 内容
$(eval a.o: a.c) # -> 相当于有一条规则 a.o: a.c
循环
$(foreach var,$(SRC),$(eval DST += $(var) -)) # -> 对 SRC 中每一项执行 $(eval...),循环变量为 var
自动分析依赖的 makefile
有了这些语法基础就可以搞自动分析依赖了。直接上代码吧,应该还是清晰的:
makefile:
# configurations SRC = $(wildcard *.c) OBJ = $(SRC:.c=.o) DST = hello FLG = -Wall -O3 -std=gnu11 LIB = all: $(DST) $(DST): $(OBJ) makefile gcc -o $@ $< $(FLG) $(LIB) .c.o: gcc -c -o $@ $< $(FLG) $(LIB) $(foreach file,$(SRC),$(eval $(shell gcc -MM $(FLG) $(file)) makefile))
Generated by Vim, colorscheme from Ubuntu 12.04, post-processed by a vimscript written by eXerigumo Clanjor (哆啦比猫/兰威举).
凡未特殊声明(转载/翻译),所有文章均为原创。
by Giumo Xavier Clanjor (哆啦比猫/兰威举), 2010-2019.
本作品采用知识共享署名·非商业性使用·相同方式共享 3.0 中国大陆许可协议进行许可。
文中凡未特殊声明且未声明为引用的代码均以 MIT 协议授权。
blog comments powered by Disqus