2017-04-25 52 views
1

這裏是我的Makefile的簡化版本:的Makefile:沒有規則的依賴關係不壞父母

all: myprogram 

myprogram: main.o 
    c++ main.o -o myprogram 

main.o: main.cpp mylib.hpp 
    c++ -c main.cpp 

mylib.hpp: mylib.inl 

所有上面提到的這些文件是真實的文件。當我改變mylib.hpp時,main.cpp重新編譯。但是,我的問題是,當我改變mylib.inl,main.cpp確實沒有重新編譯。當我編輯mylib.inl時,如何使main.o目標無效並因此使myprogram目標無效?我寧願而不是使用.PHONY目標,因爲我不想每次都重新編譯所有內容,只是當我編輯mylib.inl時。

+0

嗯也許觸摸mylib.hpp或將'mylib.hpp'放在'main.o:main.cpp mylib.hpp mylib.inl' – chux

回答

4

你的問題是,在你的makefile文件中描述的依賴性:

mylib.hpp: mylib.inl 

沒有描述一個真實的依賴性。更改mylib.inl不會更改mylib.hpp(沒有觸發此更改的規則)。

如果mylib.inlmylib.hpp包含那麼它實際上應該是在main.o一個扶養而非mylib.hpp,導致這樣的依賴性:

main.o: main.cpp mylib.hpp mylib.inl 

維護個人的依賴手工很可能是容易出錯,這是爲什麼大多數編譯器提供了可以自動創建可以從make文件包含的依賴文件的函數。然後您可以提供更通用的編譯規則。有關如何使用此功能的更多詳細信息,請查看this article

+0

當然,我很害怕這個。但謝謝你的答案! – Jerfov2