2012-06-01 54 views
4

我見過很多的方法被用來解決在Makefile中的依賴關係,如使用gcc -MMsed commond,或使用include指令(再加上一點點的Perl魔術),或qmake,或者automake,或info make等。解決Makefile中的依賴問題的常用方法是什麼?

面對如此多的選擇,我很困惑應該選擇哪一個。所以,我想知道現在如何解決Makefile中的依賴問題?處理這個問題的最好方法是什麼?

PS:C/CPP項目。

+0

這取決於情況,你可能會解釋一下你的makefile問題,這樣我們可以更好地幫助你嗎? – pyCthon

+0

它也可能取決於你需要支持哪些平臺(你需要如何移植)。 –

+0

@pyCthon其實,問題很簡單,依賴問題。如對頭文件進行修改,重新運行'make'命令只會重新生成相應的目標文件。我想知道的是解決這個問題的「最佳」或「常用」方法。謝謝。 – injoy

回答

1

一般來說,如果你關心的是支持GNU使和gcc(如所有的Linux版本和大多數UNIX類系統,這些天),你只需要使用gcc的各種-M標誌產生依賴系統,然後-include他們在您的Makefile文件。有一些很好的信息in this question - 通常不需要使用sed或更復雜的工具。

+0

感謝您的提示:-) – injoy

0

如果你只需要支持大量的Linux發行版(正如你在評論中提到的那樣),那麼我會推薦automake/autoconf套件。

這個答案假設你只是普遍問,而你還不知道在你走的時候你需要解決哪些具體問題。

編輯

GNU使單獨可以在自己的項目中處理依存產生。

autoconf處理對第三方庫,工具或系統功能的可選或替代依賴關係。 automake提供了macros,其中一些偶爾有用,即使您以其他方式使用autoconf而沒有automake

直接從automake開始的一個好處是,您的makefile文件的行爲完全可預測(在約定和便攜性方面),投資少。

因此,我謙卑的建議。

+0

automake/autoconf實際上只在需要支持非Linux系統時才需要。如果你關心的只是Linux,只需使用GNUmake –

+0

非常感謝! – injoy

+0

@ChrisDodd - +1給你的答案。現在我擴大了我的答案,您已經幫助我更好地理解這個問題的重點。我懷疑我的觀點可能是基於某種過時的個人經歷,但我會讓社區判斷。 –

0

有幾種方法來生成化妝兼容依賴於C/C++項目:

  • gcc -M,其中有幾種類型,是一種「黃金標準」,在精度方面,因爲它使用實際編譯器生成依賴關係,以及誰會比編譯器本身更好地瞭解如何處理#include語句?
  • makedepend,通常不贊成編譯器生成的依賴關係。
  • fastdep,另一個聲稱比gcc -M更快的第三方依賴關係生成器。
  • ElectricAccelerator有一個名爲autodep的內置功能,它使用構建中調​​用的命令的文件系統使用活動來生成依賴關係信息。 autodep優於其他替代方案的優點是它非常快速且完全獨立於工具和編程語言 - 而其他方面都與C/C++綁定或需要使用特定的編譯器,autodep適用於所有類型的構建工具。

我做了performance comparison幾個這些選項,而回來。

聲明:我是ElectricAccelerator的架構師和首席開發人員。