有希望的替代品?

时间:2008-09-15 20:49:06

标签: build-automation makefile

我一直在使用make和makefiles多年,虽然这个概念 是健全的,实施有一些需要。

有没有人发现任何好的替代方案,使其不会过于复杂 问题?

12 个答案:

答案 0 :(得分:25)

结帐SCons。例如,Doom 3和Blender使用它。

答案 1 :(得分:25)

我有很多朋友发誓CMake进行跨平台开发:

http://www.cmake.org/

这是用于VTK(以及其他内容)的构建系统,它是一个具有跨平台Python,Tcl和Java绑定的C ++库。我认为这可能是你用这么多功能找到的最简单的东西。

您可以随时尝试标准autotools。如果您只在Unix上运行并且坚持使用C / C ++,那么Automake文件很容易组合在一起。集成更复杂,自动工具远非最简单的系统。

答案 2 :(得分:15)

部分GNOME项目已迁移到waf

它是基于Python的,与Scons一样,但也是独立的 - 所以不要求其他开发人员安装您喜欢的构建工具,只需将独立构建脚本复制到项目中即可。

答案 3 :(得分:11)

我建议使用Rake。这是我发现的最简单的工具。

我使用的其他好工具,如果Ruby不是你的东西,那么:

  • AAP(Python)
  • SCons(Python)
  • Ant(Java,配置为XML,相当复杂)

答案 4 :(得分:10)

doit是一个python工具。它基于构建工具的概念,但更通用。

  • 您可以定义任务/规则的最新状态(不仅仅是检查时间戳,还不需要目标文件)
  • 依赖关系可以由其他任务动态计算
  • 任务的动作可以是python函数或shell命令

答案 5 :(得分:5)

了解受ninjatup影响的redo构建工具(2017年9月第1.8节)。

构建文件生成器cmake(例如,对于Unix Makefiles,Visual Studio,XCode,Eclipse CDT,...)也可以生成ninja版本文件,自版本2。8。8(2012年4月)和,afaik,ninja现在甚至是cmake使用的默认构建工具。

它应该胜过make工具(更好的依赖关系跟踪,并且也是并行化的)。

cmake是一个已经很成熟的工具。您可以随时选择构建工具,而无需修改配置文件。因此,如果将来开发出更好的版本,cmake将支持您,可以方便地切换到它。

请注意,对于c / c ++,改进编译时间有时会因为预处理器中包含的头文件而受到限制(特别是在使用仅限标题的库时,例如boost& eigen),这有希望被modules的提议所取代(在c ++ 11的技术评论中或最终在c ++ 1y中)。有关此问题的详细信息,请查看此presentation

答案 6 :(得分:4)

我编写了一个名为sake的工具,它试图让编写类似makefile的东西很容易读写。

答案 7 :(得分:3)

这取决于你想要做什么。如果你想要的 all 是make-style目标依赖项和命令调用,那么Make实际上是该任务的更好工具之一。 :-) Rake非常好,但对于一些简单的情况可能会很笨拙。 Ant当然是详细的城市,但它更好地支持构建类似Java的语言(包括Scala和Groovy)。此外,Ant 无处不在。这是我使用它的主要原因。因为它在Windows上一致地工作,所以它实际上比Make更加跨平台。

如果你想要类似Java的库的依赖管理,Maven是规范的选择,但我个人更喜欢Buildr。它更快,更容易定制(它基于Rake)。不幸的是,它还没有像Maven那样普遍存在。

答案 8 :(得分:2)

在考虑了一堆替代方案后,我仍然更喜欢制作。当您通过编译器或类似fastdep之类的东西自动生成依赖项时,没有什么可做的。特别是我不希望我的构建脚本与实现语言绑定,并且我不喜欢在有更多可读替代方案时用XML编写内容。暴露通用语言的工具虽然有价值,但是另一种解释语言却没有(afaik)。 What is Wrong with Make?可能会吸引您关于离开make的观点。

/阿伦

答案 9 :(得分:1)

Ruby的make系统称为rake:http://rake.rubyforge.org/

看起来很有希望。

总有Ant:http://ant.apache.org,我个人觉得这很可怕。然而,它是Java开发的事实标准。

答案 10 :(得分:0)

我不确定你是否在这里问正确的问题。

你是否经过简化制作?在这种情况下,你需要让一个非常熟悉make的人创建一系列(M | m)akefiles来简化你的问题。

或者您想要了解基础技术?我们是否希望强制执行代码设计中内置和执行的按合同设计类型的体系结构?或者可能是语言本身,例如Ada及其规范(接口)和主体(实现)的概念?

你所追求的方向肯定会影响这个问题的潜在结果?

基本上,构建系统的新方法只来自那些真正改变的组件,而不是采用具有设计内置机制的新技术。

对不起,这不是一个直接的答案。只是想试着让你评估你想要走哪条路。

欢呼声,

罗布

答案 11 :(得分:0)

来自RTDA的FlowTracer是我见过的另一个很好的选择,我在大规模的环境中使用商业(成千上万的工作):http://www.rtda.com/flowtracer-design-flow-infrastructure-software

它有一个GUI,显示依赖图,其中包含用于作业的彩色编码框和文件的椭圆。当作业和文件的数量变高时,像FlowTracer这样的基于GUI的工具非常重要。

初始设置成本高于Make。使用它设置第一个流程有一个学习曲线。之后,它变得更快。