2010-01-26 24 views
6

雖然我用C/C++和Java開發,但我只是編寫一個compile.bat腳本來完成一切,這對我來說很好。爲什麼我應該使用make,爲什麼我應該使用ant?make和ant的真正用途是什麼?

+0

跨平臺等 – 2010-01-26 16:10:44

+0

爲什麼這個詞真的嗎?它意味着有一個「假設」的效用,但你不會說哪一個。我想你只是問什麼是實用程序.. – Dan 2010-01-26 16:37:12

+0

如果你不得不問,使用make或ant的重點是什麼,你還沒有準備好去理解它們之間的區別。 :-) – JesperE 2010-01-27 19:46:40

回答

22

假設您有1000個源文件並只更改其中的一個。使用你的.bat腳本,你將不得不重新編譯,重新編譯只是改變了一個。這可以節省很多時間(在大型項目上閱讀小時)。

更好的是,如果您更改了其中一個頭文件,make會僅重新編譯使用該頭文件的源文件。

這兩個主要特徵意味着make和它的後代用於所有使用編譯語言的嚴肅軟件開發。

+0

哎呀,即使在一個人的項目中,在一臺快速機器上也不難獲得多分鐘的清理版本。 – dmckee 2010-01-26 16:16:15

+1

還有支持構建多個版本(調試,發佈,特定於平臺),自動化測試,安裝等的能力。是的,您可以通過滾動自己的腳本來完成所有這些工作,但爲什麼要再次發明輪子? – 2010-01-26 16:34:04

+2

如果你的makefile依賴關係是準確的,你可以通過輸入'make -j N'來做一個並行編譯,其中'N'是你想要在一個時間運行的作業數量 - 在多核CPU上很快加速。 – Dan 2010-01-26 18:30:04

1

首先,make和ant都會跟蹤哪些文件已經被編譯,所以如果不需要的話它不會重做。

4

使用構建文件,您不僅可以自動編譯代碼,您可以運行單元測試,收集指標,爲部署打包構建工件等等。

Ant的一個優點是它啓發了其他平臺的工具 - NAnt for .NET,Phing for PHP。他們做同樣的事情,並以同樣的方式工作。

2

只要你在Windows下爲自己開發:適合你自己。

但是,如果您開始與其他人一起開發Ant和Make是描述應用程序如何構建的標準。

+3

+1:一個.bat文件只能在Windows *上運行* .sh'文件*只能在Unix上運行(是的,我知道......)。 Ant的'build.xml'文件可以在任何可以運行Ant的地方運行。 – 2010-01-26 16:14:42

+0

@JoachimSauer ANT只在ANT安裝的地方構建,就像SH腳本需要安裝sh一樣,所以我不相信Ant「無處不在」,而「sh」不是。 – davenpcj 2013-08-13 18:02:19

2

可能有幾個原因: - 因爲你不是在項目 只有一個 - 因爲有人會去關心當你離開 構建腳本 - 因爲劇本的compile.bat是不是獨立於平臺 - 因爲項目的策略定義了構建技術,例如爲整個企業

我最近讀了一個有趣的article about build tools。因爲你只有第一部分可能是任何興趣(在maven開始之前)

0

你獲得了一些平臺中立性(我如何在我的linux-box上運行你的批處理腳本)。但更重要的是:構建工具支持依賴解決方案。腳本缺乏這一點,必須自行構建。

假設你有目標A,B和C.B和C都依賴於A.在一個腳本中他們稱爲子程序A.如果你現在創建一個新的目標D,這取決於B和C,執行兩次。構建工具認識到這一點,並只執行一次。

因爲這種情況通常涉及到編譯,構建分發,測試,構建文檔等工作。構建工具對於軟件開發非常有用。

0

我相信,使用.bat文件 - 或者bash或者其他shell腳本 - 可以完成Ant所能做的一切。但是在Ant中做很多事情要容易得多...

  • 創建/移動/刪除文件和目錄
  • 應用過濾器令牌
  • 運行單元測試
  • 包裝罐,拉鍊,或戰爭妥善

許多項目需要做的這些除了編譯之外,還包括構建它們的時候。

而且Ant是平臺無關的,這樣你就可以與那些誰使用其他操作系統的合作。

但是,爲什麼在螞蟻停下來? Apache Maven提供更加引人注目的功能。與自動化構建系統或持續集成使用時

0

製作和Ant真正走進自己。

生產的要求建立,測試和構建開發版本通常是不同的,並在多人的團隊,不同的開發人員以不同的方式建立自己的開發環境。

有一個明確的構建過程中解決(WOMM)中出現的每當應用程序需要建立一個不同的機器上,這是發展的一個問題,「在我的機器廠」。當一個開發人員檢查不適用於其他開發人員的機器的代碼時,它是最終的仲裁者。如果構建過程不生成工作軟件,那麼第一個開發人員的簽入被破壞。如果它確實生成了工作軟件,那麼第二個開發人員的開發環境就會被破壞 - 除非另有證明。

相關問題