GNU make 比想象中的强大 - 哆啦比猫's Blog - I'm an ArchLinuxer

GNU make 比想象中的强大

哆啦比猫 posted @ 2013年9月04日 21:41 in make with tags make makefile GNU , 1962 阅读

一直想找一个替代 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, 2011, 2012, 2013, 2014, 2015-2016 and 2017.
知识共享许可协议本作品采用知识共享署名·非商业性使用·相同方式共享 3.0 中国大陆许可协议进行许可。
文中凡未特殊声明且未声明为引用的代码均以 MIT 协议授权。

blog comments powered by Disqus
© 2010, 2011, 2012, 2013, 2014, 2015-2016 and 2017 Giumo Xavier Clanjor (哆啦比猫/兰威举).
© 2013, 2014, 2015-2016 and 2017 The Dark Colorscheme Designed by Giumo Xavier Clanjor (哆啦比猫/兰威举).
知识共享署名·非商业性使用·相同方式共享 3.0 中国大陆许可协议
| © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee