Make
為什麼我的 Makefile 在沒有更改的情況下不斷重新編譯
我有一個看起來像這樣的makefile
all: all_functions all_functions: a_functions.o b_functions.o c_functions.o d_functions.o main.o a.h b.h c.h d.h main.h gcc -o program1 a_functions.o b_functions.o c_functions.o d_functions.o main.o a_functions.o: a_functions.c a.h gcc -c -o a_functions.o a_functions.c b_functions.o: b_functions.c b.h gcc -c -o b_functions.o b_functions.c c_functions.o: c_functions.c c.h gcc -c -o c_functions.o c_functions.c d_functions.o: d_functions.c d.h gcc -c -o d_functions.o d_functions.c main.o: main.c main.h gcc -c -o main.o main.c clean: rm *.o program1 install: cp ./program1 "/usr/local/program1" uninstall: rm "/usr/local/program1"
我在makefile中使用了製表符而不是空格鍵但是當我執行make -f Makefile時,makefile每次都會編譯並創建program1,即使文件存在並且沒有進行任何更改也是如此。我的makefile有什麼問題?我必須看到錯誤消息“make:Nothing to be done for..”
您正在使用假目標,即具有有用名稱但其配方不產生目標的目標。也就是說,
make
最終嘗試建構all_functions
目標,但關聯的配方不會建構任何名為all_functions
.如果將前兩行替換為
all: program1 program1: a_functions.o b_functions.o c_functions.o d_functions.o main.o a.h b.h c.h d.h main.h
您應該會發現它的
make
行為與您期望的一樣。