[问题] makefile 自动生成依赖范例问题

楼主: anoymouse (没有暱称)   2020-01-20 15:36:33
Ubuntu
GCC
Makefile手册 4.13 Generating Prerequisites Automatically
%.d: %.c
@set -e; rm -f [email protected]; \
$(CC) -M $(CPPFLAGS) $< > [email protected]$$$$; \
sed ’s,\($*\)\.o[ :]*,\1.o [email protected] : ,g’ < [email protected]$$$$ > [email protected]; \
rm -f [email protected]$$$$
sources = foo.c bar.c
include $(sources:.c=.d)
上网查了语法解释 最终会产生一个foo.d,假设prerequisite是foo.c
然后内容是:foo.o foo.d: foo.c foo.h defs.h common.h
1.想请问include后 下一行是不就应该要下recipe了? 不然新增一个规则没recipe是
做什么呢? 因为我看我的一个专案的makefile就是在最后一行include 一个.d档,但
没有recipe。
2.foo.o foo.d: foo.c .....common.h ,为什么foo.d要摆在target的位置呢?
不是已经根据prerequisite %.c(foo.c) 判断要不要产生.d档了吗?
谢谢
作者: Schottky (顺风相送)   2020-01-20 16:01:00
recipe 没写就会使用 implicit ruleshttps://bit.ly/2uXyYlZ第二个问题是你误会了,文意是在解释 sed 的作用
楼主: anoymouse (没有暱称)   2020-01-20 16:19:00
喔喔对 忘记了但是第二个问题 还是不懂 sed的作用就是这个结果啊?
作者: Schottky (顺风相送)   2020-01-20 17:30:00
用意是当 foo.c *以外* 的 dependencies 有变化时依然能触发 foo.d 的 remake比如说有人改了 common.h 造成 foo.d 必须更新
楼主: anoymouse (没有暱称)   2020-01-21 09:16:00
可是implicit rules会推导出foo.d的remake吗?
作者: Schottky (顺风相送)   2020-01-21 14:58:00
foo.d 没有 implicit rules它的 rule/recipe 已经写在前面了,就是 sed 那几行
作者: MOONRAKER (㊣牛鹤鳗毛人)   2020-01-22 15:31:00
你要不要看简单一点的范例。

Links booklink

Contact Us: admin [ a t ] ucptt.com