我見過很多的方法被用來解決在Makefile中的依賴關係,如使用gcc -MM
和sed
commond,或使用include
指令(再加上一點點的Perl魔術),或qmake
,或者automake
,或info make
等。解決Makefile中的依賴問題的常用方法是什麼?
面對如此多的選擇,我很困惑應該選擇哪一個。所以,我想知道現在如何解決Makefile中的依賴問題?處理這個問題的最好方法是什麼?
PS:C/CPP項目。
我見過很多的方法被用來解決在Makefile中的依賴關係,如使用gcc -MM
和sed
commond,或使用include
指令(再加上一點點的Perl魔術),或qmake
,或者automake
,或info make
等。解決Makefile中的依賴問題的常用方法是什麼?
面對如此多的選擇,我很困惑應該選擇哪一個。所以,我想知道現在如何解決Makefile中的依賴問題?處理這個問題的最好方法是什麼?
PS:C/CPP項目。
一般來說,如果你關心的是支持GNU使和gcc(如所有的Linux版本和大多數UNIX類系統,這些天),你只需要使用gcc的各種-M
標誌產生依賴系統,然後-include
他們在您的Makefile文件。有一些很好的信息in this question - 通常不需要使用sed或更復雜的工具。
感謝您的提示:-) – injoy
如果你只需要支持大量的Linux發行版(正如你在評論中提到的那樣),那麼我會推薦automake/autoconf
套件。
這個答案假設你只是普遍問,而你還不知道在你走的時候你需要解決哪些具體問題。
編輯:
GNU使單獨可以在自己的項目中處理依存產生。
autoconf
處理對第三方庫,工具或系統功能的可選或替代依賴關係。 automake
提供了macros,其中一些偶爾有用,即使您以其他方式使用autoconf
而沒有automake
。
直接從automake
開始的一個好處是,您的makefile文件的行爲完全可預測(在約定和便攜性方面),投資少。
因此,我謙卑的建議。
automake/autoconf實際上只在需要支持非Linux系統時才需要。如果你關心的只是Linux,只需使用GNUmake –
非常感謝! – injoy
@ChrisDodd - +1給你的答案。現在我擴大了我的答案,您已經幫助我更好地理解這個問題的重點。我懷疑我的觀點可能是基於某種過時的個人經歷,但我會讓社區判斷。 –
有幾種方法來生成化妝兼容依賴於C/C++項目:
gcc -M
,其中有幾種類型,是一種「黃金標準」,在精度方面,因爲它使用實際編譯器生成依賴關係,以及誰會比編譯器本身更好地瞭解如何處理#include
語句?makedepend
,通常不贊成編譯器生成的依賴關係。fastdep
,另一個聲稱比gcc -M
更快的第三方依賴關係生成器。我做了performance comparison幾個這些選項,而回來。
聲明:我是ElectricAccelerator的架構師和首席開發人員。
這取決於情況,你可能會解釋一下你的makefile問題,這樣我們可以更好地幫助你嗎? – pyCthon
它也可能取決於你需要支持哪些平臺(你需要如何移植)。 –
@pyCthon其實,問題很簡單,依賴問題。如對頭文件進行修改,重新運行'make'命令只會重新生成相應的目標文件。我想知道的是解決這個問題的「最佳」或「常用」方法。謝謝。 – injoy