檔案:
bin main.d makefile test.c test.h tm.c tm.o
main.c main.o makefile~ test.d test.o tm.d
-------------------------------------------
src := $(wildcard *.c)
objs := $(patsubst %.c, %.o, $(src))
all: bin
%d : %c
set -e; rm -f $@; \
$(cc) -mm $< > $@.$$$$; echo $@; \
sed 's,\($*\)o[:]*,\1o $@ :,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
sinclude $(src:.c=.d)
bin : $(objs)
echo $^
$(cc) -o bin $^
clean:
rm -f *.o bin *.d *.d.*
展開為:
src := $(wildcard *.c)
objs := $(patsubst %.c, %.o, $(src))
all: bin
%d : %c
set -e; rm -f $@; \
$(cc) -mm $< > $@.$$$$; echo $@; \
sed 's,\($*\)o[:]*,\1o $@ :,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
test.o test.d : test.c test.h
bin : $(objs)
echo $^
$(cc) -o bin $^
clean:
rm -f *.o bin *.d *.d.*
sed 's,\($*\)o[:]*,\1o $@ :,g' < $@.$$$$ > $@; \
解析:sample:
前:test.o: test.c test.h
後:test.o test.d : test.c test.h
$@ 表示 main.d test.d tm.d 中的main.d或 test.d, 或 tm.d, 每次只能成為乙個。 %d:%c中的目標 %d的值。
$^ 表示集合 main.o test.o tm.o
$《表示依賴 %c的值, main.c或test.c或tm.c
test.o test.d : test.c test.h
表明test.o編譯會關係到test.d, 而test.d又關聯到test.c和test.h,所以只要test.c所引用到的標頭檔案有所修改,都會重新編譯test.o和test.d
執行結果:
set -e; rm -f tm.d; \
cc -mm tm.c > tm.d.$$; echo tm.d; \
sed 's,\(tm.\)o[:]*,\1o tm.d :,g' < tm.d.$$ > tm.d; \
rm -f tm.d.$$
tm.d
set -e; rm -f test.d; \
cc -mm test.c > test.d.$$; echo test.d; \
sed 's,\(test.\)o[:]*,\1o test.d :,g' < test.d.$$ > test.d; \
rm -f test.d.$$
test.d
set -e; rm -f main.d; \
cc -mm main.c > main.d.$$; echo main.d; \
sed 's,\(main.\)o[:]*,\1o main.d :,g' < main.d.$$ > main.d; \
rm -f main.d.$$
main.d
cc -c -o main.o main.c
cc -c -o test.o test.c
cc -c -o tm.o tm.c
echo main.o test.o tm.o
main.o test.o tm.o
cc -o bin main.o test.o tm.o
root@commander-lifebook-lh531:/home/samba/proj# cat test.d
test.o test.d : test.c test.h
自動生成依賴關係
值得思考的問題 目標檔案.o是否只依賴於原始檔.c?編譯器是如何編譯原始檔和標頭檔案的?解答 預處理器將標頭檔案的 直接插入原始檔,編譯器只通過預處理器的原始檔產生目標檔案。如果規則中以原始檔為依賴,命令可能無法執行。因為在修改 的時候有可能只改動了標頭檔案,原始檔沒有被修改。如果規則中只是以原始檔...
makefile自動產生依賴
makefile 中,可能需要書寫一些規則來描述乙個 o目標檔案和標頭檔案的依賴關係。例如,如果在 main.c 中使用 include defs.h 那麼我們可能需要如下那樣的乙個規則來描述當頭檔案 defs.h 被修改以後執行 make 目標 main.o 應該被重建。main.o defs.h...
Spring DI依賴注入,自動裝配
依賴注入 說白了,就是給類中的屬性賦值操作 1 構造注入 2 setter注入 2.1 value 直接注入的真實的 值 2.2 ref bean的id,可以說是引用 2.3 陣列注入 2.4 list注入 2.5 map注入 2.6 set注入 2.7 null注入 2.8 properties ...