Make

為什麼我的 Makefile 在沒有更改的情況下不斷重新編譯

  • June 9, 2022

我有一個看起來像這樣的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行為與您期望的一樣。

引用自:https://unix.stackexchange.com/questions/705587