2009-03-01 55 views
52

我是GNU Autotools(主要是Autoconf,偶爾Libtool)的非常頻繁的用戶。我正在開展一個項目,在這個項目中,可移植性將成爲一個難點。但是,其他人員與m4一起工作並不舒服。我在我的收件箱this從不是一個,而是四個人:Autoconf和Autotools的替代品?

m4 is NOT lisp, dammit!

無論如何,也許有人可以推薦一下Python或基於PHP的?我正在研究更大樹的C端;我可以肯定,Python或PHP  將會出現,因爲它們是先決條件。

+9

熟悉m4是無關緊要的。因爲m4而針對autoconf爭論就像爭論C,因爲編譯器使用lex生成的詞法分析器,開發人員不理解lex。使用自動工具時,可以完全忽略m4 98%的時間。在剩下的2%中,你也可以忽略m4!通常,如果您發現自己遇到與m4相關的問題,那是因爲您正在做其他根本性錯誤。 – 2012-04-05 16:04:21

+4

@WilliamPursell自從我問了這個問題後經過了幾年,我傾向於同意。但問題依然存在 - 使用它從根本上走向錯誤太容易了。而且,當你想要從配置中進行真正的粒度構建控制時,你最終打M4。除非我錯過了什麼? – 2012-04-06 07:28:38

+0

@TimPost幾年前,我不得不面對類似的爭論。沒有人想學習M4(或任何可以幫助的東西)。該項目成爲了bash和python腳本的組合,再加上一個可怕的C++應用程序,主要是使用C風格的宏。最後,在系統變得任意複雜(C++應用程序通過`system(2)`調用python和shell腳本)6個月後,有權切換它,我用200行M4腳本換掉了這個混亂。我永遠不會接受「我們不想學習它」作爲一個有效的藉口。 – DevNull 2017-12-04 17:07:16

回答

33

我聽說過有關CMake的好消息,它試圖解決同樣的問題。 Here是維基百科文章

+0

使用它很長一段時間沒有重大問題。 – Anonymous 2009-03-01 19:22:46

+0

我會建議同樣的事情。前段時間我提出了自己的這個問題,並得出結論認爲CMake是正確的答案。 – Juliano 2009-03-01 19:23:16

+21

謝謝,它看起來像Cmake會做我所需要的。現在,如果我甚至在我辦公桌前用火把和乾草叉「autoconf」村民出現: – 2009-03-03 07:58:33

38

我與SCons取得了很好的成功。它是用Python構建的,構建腳本本身就是Python腳本,這賦予了大量的表現力。來自網站:

SCons是一個開源軟件構建工具 - 也就是下一代構建工具。可以將SCons看作是經典的Make實用程序的改進的跨平臺替代品,其集成功能類似於autoconf/automake和編譯器緩存,如ccache。總之,SCons是構建軟件的一種更簡單,更可靠,更快捷的方式。

2

我看過CMake,看起來像一個很好的選擇,除非你正在交叉編譯。如果你正在做本地編譯,你應該試試吧

1

在Mozilla中創建了一個Python版本 - pymake - 這大概支持跨平臺的使用。

18

有許多不同的可替代生成文件發生器和構建系統在那裏:

也可用,但不嚴格定位d對C/C++:

  • Premake
  • Ant(用於Java)
  • Rake(爲Ruby)
  • (當然更多的,我只是不知道他們... ...)

但是在列出這些之後,autotools具有很大的優勢,不需要對最終用戶有任何其他依賴。配置腳本只能由開發人員生成一次,並且在用戶端不需要任何特殊的配置腳本,因爲它是一個shell腳本。上面列出的工具必須在任何人可以構建源代碼之前安裝,他們甚至可能自己擁有依賴關係。

1

對於從ANT或maven構建C/C++軟件,您可能會對terp感興趣。它包括一個可移植的C++編譯器任務,可在許多平臺上與許多C++編譯器一起工作。

43

我正在冒着被低估的機會,但是,我必須承認,遺憾的是沒有真正的自動工具替代品。 CMake,SCons,bjam都不錯,但是當涉及到認真的工作時......很明顯autotools是優越的,不是因爲CMake不能做同樣的事情,而是因爲它很難做到這一點。

例如,CMake的,最流行的替代自動工具,有以下缺點:

  • 不支持的gettext的。當您需要管理大量翻譯和翻譯源代碼時,這可能是一個真正的問題。
  • 不支持卸載目標。發現你不能卸載你安裝的程序是非常不愉快的。
  • 沒有自動構建這兩個共享和靜態庫。
  • 文檔是非常有限和壞。

依此類推。

還有很多其他的觀點。不幸的是,自動工具沒有真正的高質量替代品。另一方面,如果您在Visual Studio的Windows 上開發,則不能使用自動工具,而需要選擇提供此類工具的CMake。