it-swarm.cn

有希望的替代品?

多年来我一直在使用make和makefiles,虽然这个概念很合理,但实现还是有所不足。

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

71
mike511

退房 SCons 。例如,Doom 3和Blender使用它。

25
WaldWolf

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

http://www.cmake.org/

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

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

25
Todd Gamblin

一些GNOME项目已迁移到 waf

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

15
Eric Talevich

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

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

  • _ aap _ (Python)
  • SCons (Python)
  • Ant (Java,配置为XML,相当复杂)
11
Clinton N. Dreisbach

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

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

请注意 ninja build工具(2017年9月1日至2017年9月)受 tupredo 影响。

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

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

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

请注意,对于c/c ++,改进编译时间有时是有限的,因为预处理器中包含的头文件(特别是当使用仅头文件库时,例如 boosteigen ),希望它将被替换为提议 modules (在c ++ 11的技术评论中或最终在c ++ 1y中)。查看此 演示文稿 有关此问题的详细信息。

5
Hotschke

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

4
tonyfischetti

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

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

3
Daniel Spiewak

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

/艾伦

2
Allan Wind

Ruby的make系统叫做rake: http://rake.rubyforge.org/

看起来很有希望。

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

1
davetron5000

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

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

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

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

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

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

干杯,

0
Rob Wells

RTDA的FlowTracer是我在大规模环境中商业化使用的另一个不错的选择(数以万计的工作): http://www.rtda.com/flowtracer-design-flow-infrastructure-software

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

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

0
bu11d0zer