[問題] makefile 自動生成依賴範例問題
Ubuntu
GCC
Makefile手冊 4.13 Generating Prerequisites Automatically
%.d: %.c
@set -e; rm -f $@; \
$(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
sed ’s,\($*\)\.o[ :]*,\1.o $@ : ,g’ < $@.$$$$ > $@; \
rm -f $@.$$$$
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檔了嗎?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.7.85 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1579505795.A.8BE.html
推
01/20 16:01,
4年前
, 1F
01/20 16:01, 1F
→
01/20 16:02,
4年前
, 2F
01/20 16:02, 2F
→
01/20 16:04,
4年前
, 3F
01/20 16:04, 3F
→
01/20 16:19,
4年前
, 4F
01/20 16:19, 4F
→
01/20 16:20,
4年前
, 5F
01/20 16:20, 5F
→
01/20 17:30,
4年前
, 6F
01/20 17:30, 6F
→
01/20 17:31,
4年前
, 7F
01/20 17:31, 7F
→
01/20 17:32,
4年前
, 8F
01/20 17:32, 8F
→
01/21 09:16,
4年前
, 9F
01/21 09:16, 9F
remake一次 是不是就要做類似範例的動作一次?
※ 編輯: anoymouse (61.216.7.85 臺灣), 01/21/2020 09:24:53
→
01/21 14:58,
4年前
, 10F
01/21 14:58, 10F
→
01/21 14:58,
4年前
, 11F
01/21 14:58, 11F
釐清一下:
所以有兩個地方有foo.d的rules
1. %.d:%.c
sed .....
2. foo.o foo.d: foo.c foo.h defs.h common.h
foo.d的recipe只有在1.有寫,也就是foo.c比foo.d還新的的時候才會執行吧?
就算2中的.h有任何一個比foo.d還新,也不會因為就這樣跳到1.的rule去執行1.的recipe
吧?
→
01/22 15:31,
4年前
, 12F
01/22 15:31, 12F
※ 編輯: anoymouse (61.230.114.99 臺灣), 01/24/2020 15:30:17
※ 編輯: anoymouse (61.230.114.99 臺灣), 01/24/2020 15:33:44