虽然我用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. cURL的正确用途是什么?
- 6. CGContextSaveGState和CGContextRestoreGState的用途是什么?
- 7. HashMap.Entry.recordAccess和recordRemoval的用途是什么?
- 8. minOccurs,nillable和restriction的用途是什么?
- 9. GL_COLOR_BUFFER_BIT和GL_DEPTH_BUFFER_BIT的用途是什么?
- 10. Content.xml和Fragment.xml的用途是什么
- 11. `$ .support.ownLast`的用途是什么?
- 12. TPopupActionBar的用途是什么?
- 13. _GLOBAL__I_的用途是什么?
- 14. $ _POST的用途是什么?
- 15. “$ this”的用途是什么?
- 16. CreateSilverlight.js的用途是什么?
- 17. vertexAttribPointer的用途是什么?
- 18. RecognizerIntent.DETAILS_META_DATA的用途是什么?
- 19. Rake的用途是什么?
- 20. javax.security.auth.callback。*的用途是什么?
- 21. config.assets.precompile的用途是什么?
- 22. is_uploaded_file()的用途是什么?
- 23. archetypeArtifactId的用途是什么?
- 24. System.Data.SqlClient.SqlParameter.IsNullable的用途是什么?
- 25. com.sun.org.apache.xpath.internal.operations.String的用途是什么?
- 26. FXCollections.unmodifiableObservableList的用途是什么?
- 27. __init__的用途是什么?
- 28. __cxa_pure_virtual的用途是什么?
- 29. cURL的用途是什么?
- 30. RhoMobile的用途是什么?
跨平台等 – 2010-01-26 16:10:44
为什么这个词真的吗?它意味着有一个“假设”的效用,但你不会说哪一个。我想你只是问什么是实用程序.. – Dan 2010-01-26 16:37:12
如果你不得不问,使用make或ant的重点是什么,你还没有准备好去理解它们之间的区别。 :-) – JesperE 2010-01-27 19:46:40