雖然我用C/C++和Java開發,但我只是編寫一個compile.bat腳本來完成一切,這對我來說很好。爲什麼我應該使用make,爲什麼我應該使用ant?make和ant的真正用途是什麼?
回答
假設您有1000個源文件並只更改其中的一個。使用你的.bat腳本,你將不得不重新編譯,重新編譯只是改變了一個。這可以節省很多時間(在大型項目上閱讀小時)。
更好的是,如果您更改了其中一個頭文件,make會僅重新編譯使用該頭文件的源文件。
這兩個主要特徵意味着make和它的後代用於所有使用編譯語言的嚴肅軟件開發。
首先,make和ant都會跟蹤哪些文件已經被編譯,所以如果不需要的話它不會重做。
使用構建文件,您不僅可以自動編譯代碼,您可以運行單元測試,收集指標,爲部署打包構建工件等等。
Ant的一個優點是它啓發了其他平臺的工具 - NAnt for .NET,Phing for PHP。他們做同樣的事情,並以同樣的方式工作。
只要你在Windows下爲自己開發:適合你自己。
但是,如果您開始與其他人一起開發Ant和Make是描述應用程序如何構建的標準。
+1:一個.bat文件只能在Windows *上運行* .sh'文件*只能在Unix上運行(是的,我知道......)。 Ant的'build.xml'文件可以在任何可以運行Ant的地方運行。 – 2010-01-26 16:14:42
@JoachimSauer ANT只在ANT安裝的地方構建,就像SH腳本需要安裝sh一樣,所以我不相信Ant「無處不在」,而「sh」不是。 – davenpcj 2013-08-13 18:02:19
可能有幾個原因: - 因爲你不是在項目 只有一個 - 因爲有人會去關心當你離開 構建腳本 - 因爲劇本的compile.bat是不是獨立於平臺 - 因爲項目的策略定義了構建技術,例如爲整個企業
我最近讀了一個有趣的article about build tools。因爲你只有第一部分可能是任何興趣(在maven開始之前)
你獲得了一些平臺中立性(我如何在我的linux-box上運行你的批處理腳本)。但更重要的是:構建工具支持依賴解決方案。腳本缺乏這一點,必須自行構建。
假設你有目標A,B和C.B和C都依賴於A.在一個腳本中他們稱爲子程序A.如果你現在創建一個新的目標D,這取決於B和C,執行兩次。構建工具認識到這一點,並只執行一次。
因爲這種情況通常涉及到編譯,構建分發,測試,構建文檔等工作。構建工具對於軟件開發非常有用。
我相信,使用.bat文件 - 或者bash或者其他shell腳本 - 可以完成Ant所能做的一切。但是在Ant中做很多事情要容易得多...
- 創建/移動/刪除文件和目錄
- 應用過濾器令牌
- 運行單元測試
- 包裝罐,拉鍊,或戰爭妥善
許多項目需要做的這些除了編譯之外,還包括構建它們的時候。
而且Ant是平臺無關的,這樣你就可以與那些誰使用其他操作系統的合作。
但是,爲什麼在螞蟻停下來? Apache Maven提供更加引人注目的功能。與自動化構建系統或持續集成使用時
製作和Ant真正走進自己。
生產的要求建立,測試和構建開發版本通常是不同的,並在多人的團隊,不同的開發人員以不同的方式建立自己的開發環境。
有一個明確的構建過程中解決(WOMM)中出現的每當應用程序需要建立一個不同的機器上,這是發展的一個問題,「在我的機器廠」。當一個開發人員檢查不適用於其他開發人員的機器的代碼時,它是最終的仲裁者。如果構建過程不生成工作軟件,那麼第一個開發人員的簽入被破壞。如果它確實生成了工作軟件,那麼第二個開發人員的開發環境就會被破壞 - 除非另有證明。
- 1. Tuple的真正用途是什麼?
- 2. EditorReuseAttribute的真正用途是什麼?
- 3. Javassist。什麼是主要思想和真正的用途?
- 4. Challenge Token在Vtiger Web Services中的真正用途是什麼?
- 5. PHP - base64_encode函數的真正用途是什麼
- 6. HTML5 appcache:NETWORK:部分的真正用途是什麼?
- 7. cURL的正確用途是什麼?
- 8. ant-contrib的trycatch中「finally」元素的用途是什麼?
- 9. 什麼是真正的pymc
- 10. 真正的1NF是什麼?
- 11. 真正的PNG是什麼?
- 12. FolderInformation和FileInformation的用途是什麼?
- 13. toolz.thread_first()和toolz.thread_last()的用途是什麼?
- 14. _IOR_BAD和_IOW_BAD的用途是什麼?
- 15. glTexParameterIiv和glTexParameterIuiv的用途是什麼?
- 16. HashMap.Entry.recordAccess和recordRemoval的用途是什麼?
- 17. BFS和DFS的用途是什麼?
- 18. minOccurs,nillable和restriction的用途是什麼?
- 19. Windows.Forms.Form.HelpButton的用途和約定是什麼?
- 20. GL_COLOR_BUFFER_BIT和GL_DEPTH_BUFFER_BIT的用途是什麼?
- 21. webpack [hash]和[chunkhash]的用途是什麼?
- 22. CGContextSaveGState和CGContextRestoreGState的用途是什麼?
- 23. Content.xml和Fragment.xml的用途是什麼
- 24. layout.xml的用途是什麼?
- 25. PhoneGap的用途是什麼?
- 26. AtomicReferenceArray的用途是什麼?
- 27. felix.xml的用途是什麼?
- 28. WSDL的用途是什麼?
- 29. RegisterFmxClasses的用途是什麼?
- 30. FXCollections.observableArrayList的用途是什麼?
跨平臺等 – 2010-01-26 16:10:44
爲什麼這個詞真的嗎?它意味着有一個「假設」的效用,但你不會說哪一個。我想你只是問什麼是實用程序.. – Dan 2010-01-26 16:37:12
如果你不得不問,使用make或ant的重點是什麼,你還沒有準備好去理解它們之間的區別。 :-) – JesperE 2010-01-27 19:46:40