[問題] 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