2011-09-01 73 views
4

其實我有一個庫'cryptopp',我想要的是,當我對文件進行任何更改併發出make命令時,它應該照顧變化在源目錄中的任何文件中創建。那麼,cryptoopp的GNUMakefile會處理'.cpp'文件中的'if'更改,但不處理'.h'文件中所做的更改。如何編寫makefile來處理頭文件中的更改

那麼我可以在cryptopp的'GNUMakefile'中做什麼修改,以便它查看所有修改過的頭文件並重新編譯所有依賴於'modified'頭文件的文件。

回答

2

你必須所有的依賴添加到您的Makefile:

mycode.o: mycode.cpp mycode.h somelib.h resources.h 
     $(CXX) -c -o [email protected] $< $(CXXFLAGS) $(INCLUDES) 

如果你已經有了一個通用的模式匹配的命令行,你不必再命令說,你可以列出的依賴關係:

%o: %.cpp 
     $(CXX) -c -o [email protected] $< $(CXXFLAGS) $(INCLUDES) 

mycode.o: mycode.cpp mycode.h somelib.h resources.h 

yourcode.o: yourcode.cpp yourcode.h mycode.h somethingelse.h 

# ... 

一般來說,這是一個可怕的和不可擴展的混亂。幾乎肯定會想要一個更高級別的構建系統爲您生成Makefile。即使對於非常小的項目來說,在Makefile中保持頭文件依賴性是最新的,這是一件非常痛苦的事情,它根本就不值得。

有幾種流行的可移植構建環境。我個人很喜歡cmake,其中包括髮現如果您更改了構建設置(例如從調試到發佈)並且將始終構建所有必需的文件(例如,如果更改cmake主文件並鍵入「make」它會首先自動爲你再次運行cmake)。

對於您可以嘗試makedepend,或臭名昭著的autotools Unix的唯一的解決辦法,儘管這完全是另外一個頭疼......

+0

這是一團糟。這就是爲什麼使用'.depend'文件(由編譯器自動生成)... –

2

如果安裝在您的系統上,您可以嘗試'makedepend'。最簡單的方法是將一個目標添加到您的生成文件。例如:

depend: 
    makedepend *.cc 

您可能需要用源文件列表替換'* .cc'。然後你可以用'make depend'命令重新生成所有的依賴關係。您可能希望將錯誤消息重定向到/ dev/null,因爲它似乎總是產生大量噪音。

相關問題