PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] 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 rules
https://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
你要不要看简单一点的范例。
继续阅读
[赠书] 两本C++ 用书(已送出)
Nunapig60kg
[问题] CRC CCITT的问题
a1781781781
[问题] 新手reverse linked list debug
Moderator
[问题] 指标转型
j5128709
[问题] 最近转用CLion遇到的障碍
jack41402
[心得] exception handling 的实作-personality
descent
Re: [问题] 如何将此程式码 用循环的方式表达
neiltsang
[问题] 使用 callback 的时机
largesperm
[问题] 请益如何避免While循环中重启问题
sweetdance
[问题] 请教ALLEGRO 5使用
Utchi
Links
booklink
Contact Us: admin [ a t ] ucptt.com