1
在Managing Projects with GNU Make的第8章(P150)中,作者介紹了Tromey’s Way
。makefile雙美元符號用戶自定義函數
define make-depend
$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -M $1 | \
$(SED) 's,\($$(notdir $2)\) *:,$$(dir $2) $3: ,' > $3.tmp
$(MV) $3.tmp $3
endef
%.o: %.c
$(call make-depend,$<,[email protected],$(subst .o,.d,[email protected]))
$(COMPILE.c) -o [email protected] $<
我的雙美元符號的理解,$$(notdir $2)
和$$(dir $2)
,是它用來逃避$
以便它後來擴大。但是,我們期望它在這裏運營商$2
,對吧?
我懷疑這是一個錯誤,但我無法在勘誤中找到它。這真的是一個錯誤,還是我誤解了它?
謝謝您的確認。上述sed處理是爲了解決make restart問題。它是添加依賴文件作爲頭文件和源文件列表的目標,如'list.o list.d:list.c list.h'。我查了一下gcc手冊,但是我找不到'-M'這個選項。 –
當您使用此方法時,您不希望'.d'文件成爲目標。你爲什麼要添加它? – MadScientist
實際上,我希望'.d'作爲目標,因爲這本書中介紹的某些好處(P151),作爲避免重新啓動的一種方法。總結在這裏:'.d'和'.o'通過這種方式邏輯連接,缺少'.d'則表示缺少'.o'。因此,我們可以忽略缺少的'.d',然後繼續。 –