Autoconf和Autotools的替代品?

问题描述:

我是GNU Autotools(主要是Autoconf,偶尔Libtool)的非常频繁的用户。我正在开展一个项目,在这个项目中,可移植性将成为一个难点。但是,其他人员与m4一起工作并不舒服。我在我的收件箱this从不是一个,而是四个人:Autoconf和Autotools的替代品?

m4 is NOT lisp, dammit!

无论如何,也许有人可以推荐一下Python或基于PHP的?我正在研究更大树的C端;我可以肯定,Python或PHP  将会出现,因为它们是先决条件。

+9

熟悉m4是无关紧要的。因为m4而针对autoconf争论就像争论C,因为编译器使用lex生成的词法分析器,开发人员不理解lex。使用自动工具时,可以完全忽略m4 98%的时间。在剩下的2%中,你也可以忽略m4!通常,如果您发现自己遇到与m4相关的问题,那是因为您正在做其他根本性错误。 – 2012-04-05 16:04:21

+4

@WilliamPursell自从我问了这个问题后经过了几年,我倾向于同意。但问题依然存在 - 使用它从根本上走向错误太容易了。而且,当你想要从配置中进行真正的粒度构建控制时,你最终打M4。除非我错过了什么? – 2012-04-06 07:28:38

+0

@TimPost几年前,我不得不面对类似的争论。没有人想学习M4(或任何可以帮助的东西)。该项目成为了bash和python脚本的组合,再加上一个可怕的C++应用程序,主要是使用C风格的宏。最后,在系统变得任意复杂(C++应用程序通过`system(2)`调用python和shell脚本)6个月后,有权切换它,我用200行M4脚本换掉了这个混乱。我永远不会接受“我们不想学习它”作为一个有效的借口。 – DevNull 2017-12-04 17:07:16

我听说过有关CMake的好消息,它试图解决同样的问题。 Here是*文章

+0

使用它很长一段时间没有重大问题。 – Anonymous 2009-03-01 19:22:46

+0

我会建议同样的事情。前段时间我提出了自己的这个问题,并得出结论认为CMake是正确的答案。 – Juliano 2009-03-01 19:23:16

+21

谢谢,它看起来像Cmake会做我所需要的。现在,如果我甚至在我办公桌前用火把和干草叉“autoconf”村民出现: – 2009-03-03 07:58:33

我与SCons取得了很好的成功。它是用Python构建的,构建脚本本身就是Python脚本,这赋予了大量的表现力。来自网站:

SCons是一个开源软件构建工具 - 也就是下一代构建工具。可以将SCons看作是经典的Make实用程序的改进的跨平台替代品,其集成功能类似于autoconf/automake和编译器缓存,如ccache。总之,SCons是构建软件的一种更简单,更可靠,更快捷的方式。

我看过CMake,看起来像一个很好的选择,除非你正在交叉编译。如果你正在做本地编译,你应该试试吧

在Mozilla中创建了一个Python版本 - pymake - 这大概支持跨平台的使用。

有许多不同的可替代生成文件发生器和构建系统在那里:

也可用,但不严格定位d对C/C++:

  • Premake
  • Ant(用于Java)
  • Rake(为Ruby)
  • (当然更多的,我只是不知道他们... ...)

但是在列出这些之后,autotools具有很大的优势,不需要对最终用户有任何其他依赖。配置脚本只能由开发人员生成一次,并且在用户端不需要任何特殊的配置脚本,因为它是一个shell脚本。上面列出的工具必须在任何人可以构建源代码之前安装,他们甚至可能自己拥有依赖关系。

对于从ANT或maven构建C/C++软件,您可能会对terp感兴趣。它包括一个可移植的C++编译器任务,可在许多平台上与许多C++编译器一起工作。

我正在冒着被低估的机会,但是,我必须承认,遗憾的是没有真正的自动工具替代品。 CMake,SCons,bjam都不错,但是当涉及到认真的工作时......很明显autotools是优越的,不是因为CMake不能做同样的事情,而是因为它很难做到这一点。

例如,CMake的,最流行的替代自动工具,有以下缺点:

  • 不支持的gettext的。当您需要管理大量翻译和翻译源代码时,这可能是一个真正的问题。
  • 不支持卸载目标。发现你不能卸载你安装的程序是非常不愉快的。
  • 没有自动构建这两个共享和静态库。
  • 文档是非常有限和坏。

依此类推。

还有很多其他的观点。不幸的是,自动工具没有真正的高质量替代品。另一方面,如果您在Visual Studio的Windows 上开发,则不能使用自动工具,而需要选择提供此类工具的CMake。

如何简单地使用Makepkg-config

这是一个Makefile template让你开始。

少就是多人。

另一个汽车*替代 - mk-configure。可以找到文档here