2010-01-26 69 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)中出现的每当应用程序需要建立一个不同的机器上,这是发展的一个问题,“在我的机器厂”。当一个开发人员检查不适用于其他开发人员的机器的代码时,它是最终的仲裁者。如果构建过程不生成工作软件,那么第一个开发人员的签入被破坏。如果它确实生成了工作软件,那么第二个开发人员的开发环境就会被破坏 - 除非另有证明。

相关问题