2011-04-29 38 views
30

我一直在尋找優點&缺點Autotools和CMake。但我想知道使用這些工具中的一種(或兩種)進行項目的人的意見。Autotools vs CMake

我在一年前基本上使用了Autotools,而且我知道其中一個好處是它依賴於shell腳本,因此不需要安裝即可運行。但它看起來太過於面向Linux,並且無法在Windows上運行配置文件。

我現在已經爲an open source project選擇了一個編譯系統工具,它必須至少編譯爲Linux的& Windows。它用C++編寫,使用Qt GUI前端,其餘部分是「通用」。

感謝您的幫助。

+1

可能重複的[Autotools與Cmake與Scons](http://stackoverflow.com/questions/4071880/autotools-vs-cmake-vs-scons) – ptomato 2011-04-30 22:13:59

回答

30

我不會推薦Windows的autotools。使用CMake。

爲什麼? Windows沒有原生sh.exe,仿真速度很慢。配置錯誤也很容易。我並不是說在CMake中這是不可能的,但是CMake肯定會將更多的摘要提取出來,所以你不用擔心。 CMake文檔可能有點難以閱讀,但一旦設置完成,對於CMake曾經支持過的所有工具鏈都應該沒問題。 CMake還集成了測試,打包等...

Autotools在Windows上很慢,不能很容易地與MSVC一起工作,並且在Windows(和其他操作系統)難以調試並且很難修復的情況下具有怪異的怪癖。如果你認爲它應該並且可以的話,libtool也會吸引Windows,它甚至會拒絕構建共享庫。工具鏈重定位問題在libtool中也很流行,它可能會查看用戶工具鏈中的錯誤文件。 CMake在這方面要容易得多。它假設目標平臺是正常的事情,並創建通用和良好的構建指令。

另外,CMake有彩色輸出:)和很好的進度百分比。作爲用戶,我只是在Windows上使用CMake和autotools的一些經驗。 CMake的往往工作,自動工具往往會咬你的耳朵關閉,當你不看,在你的微笑,當它由於某種奇怪的錯誤...

+0

不錯的結論大聲笑:D說到CTest,你是否認爲這是一個好主意,即使是用少量測試(〜120)的小項目也可以使用它?相比於一個非常容易做自制的腳本外殼,我並沒有看到很多優勢(這意味着它只會在外殼的基於unix的平臺上進行測試)。 – 2011-04-29 22:04:49

+0

@Julio:好吧,CTest保證(我認爲)主要是平臺兼容性。沒有人強迫你使用Cmake的其他任何東西。 – rubenvb 2011-04-29 22:07:33

+0

很好說,這就是爲什麼我經常使用短語「一切編譯在* nix」,因爲大多數事情都有一個autoconf配置腳本,但不是CMakeLists.txt - 然後有提升......編譯是Windows上不一致的噩夢:) – 2013-11-07 04:57:55

55

月的19日更新2017年:

我有之前使用autotools的時間相當長。

目前我分別在工作和個人項目中大量使用cmake和meson

一些個人建議:

  1. 的大隊伍,如果你想利用發電機VS和的Xcode堅持CMake的。如果你不需要這些,我會認真考慮介子。
  2. 在autotools上選擇介子,除非你需要autotools支持的一些非常深奧的東西,介子不支持。否則,恕我直言,Meson是一個比autotools更好的選擇,你將能夠支持Windows。

我也試過scons,waftup

功能最全面的跨平臺系統是CMake,但來自介子的DSL將更容易用於習慣於python等人。 Meson也開始支持VS(VS2015發電機),並且一些項目已經有了它的實驗支持,例如gstreamer。 Gstreamer在編譯窗口時也使用介子。現在有VS2015發電機和VS2017,但我最近沒有嘗試過自己的發電機。至於介子0.37.1需要一些工作,但他們正在改進它們,目前的版本已經是0.40。

介子

優點:

  • 的DSL不會在所有的方式獲得。事實上,這是非常好的和熟悉的,基於python。
  • 精心設計的交叉編譯支持。
  • 的對象都是強類型的:你不能讓字符串替換錯誤很容易,因爲對象是諸如「depencency」實體「包括目錄」等
  • 這是非常obviuos如何添加一個模塊的一個你的工具。
  • 交叉編譯似乎更直接使用。
  • 真的很好想。 Meson的設計師和主要作者知道他在設計構建系統時很好地談論了什麼。
  • 非常非常快,尤其是在增量構建中。
  • 該文檔是您可以在cmake中找到的10倍更好的文檔。去訪問http://mesonbuild.com,你會發現教程,howtos和一個很好的參考。這並不完美,但它確實是可以發現的。

缺點:作爲CMake的,不過,我認爲它已經對C完全可用++

  • 沒有成熟。
  • 儘管gnome,qt和常用模塊已經存在,但沒有那麼多模塊可用。
  • 項目生成器:似乎VS生成器不能很好地工作,因爲現在。 CMake項目生成器更加成熟。
  • 有一個python3 +忍者依賴。

CMake的

優點:

  • 生成許多不同的IDE項目。這是一個非常適合團隊的不錯的功能。
  • 與自動工具不同,可以很好地與Windows工具一起玩。
  • 成熟的,幾乎事實上的標準。
  • 微軟正在爲Visual Studio開發CMake集成。

缺點:

  • 它不遵循任何衆所周知的標準或準則。
  • 沒有卸載目標。
  • DSL很奇怪,當你開始做比較等等,以及字符串VS列表的東西或轉義字符,你會犯很多錯誤,我很確定。
  • 交叉編譯很糟糕。

自動工具

優點:

  • 的交叉編譯最強大的系統,恕我直言。
  • 生成的腳本不需要make,shell以及編譯器(如果需要編譯)。
  • 命令行非常好,一致。
  • unix世界的一個標準,很多文檔。
  • 真正強大的命令行:更改安裝目錄,卸載, 重命名二進制文件...
  • 如果您的目標是unix,使用此工具打包源代碼非常方便。

缺點:

  • 它不會與微軟的工具,發揮出色。一個真正的showstopper。
  • 學習曲線是......好吧......但實際上我可以說CMake也不那麼容易。

關於學習曲線,有兩個非常好的來源可以借鑑:

第一源將讓你和運行更快。這本書是一個更深入的討論。

從Scons,waf和tup,Scons和tup更像是make。 Waf更像CMake和autotools。起初,我嘗試了waf而不是cmake。我認爲它是一個完整的面向對象API的意義上的過度工程。這些腳本根本看起來並不簡短,它讓我對工作目錄和相關內容感到困惑。最後,我發現autotools和CMake是更好的選擇。我最喜歡的這三個構建系統是tup。

託普

優點

  • 真的正確。
  • 瘋狂快速。你應該試着相信它。
  • 腳本語言依賴於一個非常簡單的想法,可以在10分鐘內理解。

缺點

  • 它不會有一個全功能的配置框架。
  • 我無法找到製作目標的方法,例如doc,因爲 他們生成我不知道的文件,並且它們必須在生成之前列在輸出中,或者至少,這是我現在的結論。這是一個非常惱人的限制,如果是這樣,因爲我不確定。

總而言之,目前我唯一正在考慮的新項目是Cmake和Meson。當我有機會時,我也會嘗試tup,但是它缺少配置框架,這意味着當你需要所有這些東西時,它會使事情變得更加複雜。另一方面,它非常快。

+1

很好的概述;感謝鏈接到_Autotools Mythbuster_。我有一本Calcote書的電子​​書,但很高興看到另一個角度。謝謝 – Geremia 2016-02-20 03:54:34

+1

感謝! Meson看起來相當不錯,只是我不喜歡的東西大多是一個python的東西(管理多個安裝版本)。 Meson有沒有辦法構建使用不同構建系統的子項目?我看到了一種運行外部命令的方法,它可以工作,但看起來不那麼優雅。 – Ryan 2017-07-11 16:53:10

+0

我不確定它確實如此,但您始終可以集成腳本。事實上,我更喜歡用介子把手放下。您在cmake中浪費時間處理腳本語言的時間會保存在介子中,您可以使用它來集成它。但我記得,包裝介子(這是介子的子項目功能)現在支持預編譯和源代碼。從源代碼構建,不幸的是,你需要一個介子文件。對於小型項目來說,這很容易,對於大型項目而言,重複此操作始終是不可行的。 – 2017-07-15 01:27:55