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