Here本教程對它進行了相當精美的解釋,其中大部分工作正常。以下是本教程最後的Makefile它假設你有一個像下面這樣的目錄結構:在make中自動生成依賴關係並將它們包括在依賴項列表中
root-----Makefile
|-----All source files here.
編譯的結果將在root
目錄。以下是Makefile:
OBJS := foo.o bar.o
# link
proggie: $(OBJS)
gcc $(OBJS) -o proggie
# pull in dependency info for *existing* .o files
-include $(OBJS:.o=.d) #NOTE THIS
%.o: %.c #NOTE THIS
gcc -c $(CFLAGS) $*.c -o $*.o
gcc -MM $(CFLAGS) $*.c > $*.d
@cp -f $*.d $*.d.tmp
@sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \
sed -e 's/^ *//' -e 's/$$/:/' >> $*.d
@rm -f $*.d.tmp
# remove compilation products
clean:
rm -f proggie *.o *.dOBJS := foo.o bar.o
我不明白教程中的一件事。它說pull in dependency info for *existing* .o files
和相應的.d
文件被創建,但是這些文件是如何處理的,因爲在仍然保留%.o: %.c
的目標的依賴列表中沒有對其進行修改。
事實上,從我注意到它只是不適合我。任何人都可以解釋這裏發生了什麼。如果本教程有誤(我非常懷疑),請提及如何將依賴項從.d
文件包含到依賴項列表中。
但仍然依賴列表仍然是「%.o:%.c」。內部做這件事。 –
更新了答案 – perreal