0
我有這樣的Makefile:製作不遵循依賴關係鏈
all: src/exec
src/exec:
make -C src/
src/exec: src/bar.o
src/bar.o: src/bar.h
而在src
目錄中的這些文件:
touch src/exec src/bar.o src/bar.h
當我擊使我得到:
$ make
make: Nothing to be done for 'all'.
現在,如果我更改爲src/bar.h
,我會得到相同的結果:
$ touch src/bar.h
$ make
make: Nothing to be done for 'all'.
我不明白。製作應遵循的依賴關係鏈:
all <- src/exec <- src/bar.o <- src/bar.h
如果src/bar.h
變化目標作爲重建嗎?
當我使用兩種gcc -MM
或makedepend
產生*.d
文件,我注意到,正是在這些文件中相同的規則:
bar.o: bar.c bar.h
exec: bar.o foo.o
那麼我要做的應該在某個點工作。我錯了嗎?
由於'src/exec'存在,所以'make'沒有任何用處(src/bar.o'的修改時間幾乎可以肯定地與'src/exec'的修改時間相同)。取消所有後綴也可能不是一個好主意;它有效地刪除了所有有用的默認規則。除非您(a)確實知道它做了什麼,並且(b)將後綴重置爲非空 - 或者以完全不同的風格編寫makefile,否則不應包含'.SUFFIXES:'行。 –
那麼'makedepend'如何工作?它完全相同的創建規則,如'bar.o:bar.c bar.h'和'exec:bar.o' – nowox
您的意思是'makedepend'或'make depend'?前者是一個單獨的程序,與你的makefile只有很小的關係 - 你需要確定它的來源,以便研究它。後者需要在你的makefile中有一個規則,你沒有顯示。 (它不會與'.SUFFIXES'混淆。) –