首先,
-MF $(OBJDIR)/NetStats.d
生成依賴文件這然後允許的來源自動重建某些東西在報頭改變。
所以,它的NetStats.cpp改變,它將盡快運行make與取決於NetStats.o
二的目標,從GCC文檔重建:
-MT target
更改由依賴關係生成發出的規則的目標。默認情況下,CPP採用主輸入文件的名稱(包括任何路徑),刪除任何文件後綴(如「.c」),並附加平臺的通常對象後綴。結果是目標。
-MT選項會將目標設置爲您指定的字符串。如果您需要多個目標,則可以將它們指定爲-MT的單個參數,或使用多個-MT選項。
例如,-MT '$(objpfx)foo.o的' 可能給 $(objpfx)foo.o的:foo.c的
.d文件看起來就像生成文件的一部分。下面是從Canvas.d爲我的項目之一的摘錄:
Out/Mac/ppc64/Obj/Canvas.o: Src/Linderdaum/Renderer/Canvas.cpp \
Src/Linderdaum/Renderer/Canvas.h Src/Linderdaum/Core/iObject.h \
/usr/include/c++/4.0.0/deque /usr/include/c++/4.0.0/bits/functexcept.h \
/usr/include/c++/4.0.0/exception_defines.h \
.....
基本上,預處理程序搜索所有的依賴在.cpp文件並生成一個附加的目標來指定這些依賴關係。
要查看.d文件真的是一個可以嘗試寫有test1.c
#include <stdio.h>
#include <stdlib.h>
int main() { return 0; }
,並運行gcc的-MD -c test.c的命令
對於我的MingW環境中,
test.o: test.c \
c:\eqmingw\bin\../lib/gcc/x86_64-w64-mingw32/4.6.0/../../../../x86_64-w64-mingw32/include/stdio.h \
c:\eqmingw\bin\../lib/gcc/x86_64-w64-mingw32/4.6.0/../../../../x86_64-w64-mingw32/include/_mingw.h \
c:\eqmingw\bin\../lib/gcc/x86_64-w64-mingw32/4.6.0/../../../../x86_64-w64-mingw32/include/_mingw_mac.h \
c:\eqmingw\bin\../lib/gcc/x86_64-w64-mingw32/4.6.0/../../../../x86_64-w64-mingw32/include/vadefs.h \
c:\eqmingw\bin\../lib/gcc/x86_64-w64-mingw32/4.6.0/../../../../x86_64-w64-mingw32/include/sdks/_mingw_directx.h \
c:\eqmingw\bin\../lib/gcc/x86_64-w64-mingw32/4.6.0/../../../../x86_64-w64-mingw32/include/sdks/_mingw_ddk.h \
c:\eqmingw\bin\../lib/gcc/x86_64-w64-mingw32/4.6.0/../../../../x86_64-w64-mingw32/include/_mingw_print_push.h \
c:\eqmingw\bin\../lib/gcc/x86_64-w64-mingw32/4.6.0/../../../../x86_64-w64-mingw32/include/sec_api/stdio_s.h \
c:\eqmingw\bin\../lib/gcc/x86_64-w64-mingw32/4.6.0/../../../../x86_64-w64-mingw32/include/_mingw_print_pop.h \
c:\eqmingw\bin\../lib/gcc/x86_64-w64-mingw32/4.6.0/../../../../x86_64-w64-mingw32/include/stdlib.h \
c:\eqmingw\bin\../lib/gcc/x86_64-w64-mingw32/4.6.0/include-fixed/limits.h \
c:\eqmingw\bin\../lib/gcc/x86_64-w64-mingw32/4.6.0/include-fixed/syslimits.h \
c:\eqmingw\bin\../lib/gcc/x86_64-w64-mingw32/4.6.0/../../../../x86_64-w64-mingw32/include/limits.h \
c:\eqmingw\bin\../lib/gcc/x86_64-w64-mingw32/4.6.0/../../../../x86_64-w64-mingw32/include/sec_api/stdlib_s.h \
c:\eqmingw\bin\../lib/gcc/x86_64-w64-mingw32/4.6.0/../../../../x86_64-w64-mingw32/include/malloc.h
要從相關性列表中排除系統包含文件,還可以使用-MM開關。
NetStats.d如何工作? –
添加了對答案的解釋。基本上,它是一個「minitarget」 –