【发布时间】:2010-09-28 05:13:57
【问题描述】:
对于 linux/freebsd,make 有哪些替代品?
【问题讨论】:
对于 linux/freebsd,make 有哪些替代品?
【问题讨论】:
我喜欢SCons。它的构造方式使得每个构建脚本(SConstruct 文件)也是语法上有效的 Python 程序。因此,如果需要,您可以在构建脚本中构建任意 Python 逻辑。
它也比make快得多,并且自动计算多种依赖关系。
【讨论】:
我的第一个问题是,观众是什么。这是为了构建只有您的团队才能构建的内部软件吗?如果是这样,请探索一些已经提出的选项。如果这是其他人将要构建的东西,要么坚持使用 make,要么使用创建 makefile 的工具并发布它们。我们在 Linux 和其他 unix 平台上使用 autoconf 和 automake。在我看来,你需要一个很好的理由来做除了配置之外的事情;制作;进行安装。 Boost 有自己的工具(Jam 的修改版本),每次我需要尝试让它在不寻常的机器上编译时,它都会让我很烦恼。
【讨论】:
【讨论】:
Automake :p 常用于大多数 linux 应用程序发行版,但它比 Makefile 提供更多的工作,但效果更好http://www.gnu.org/software/automake/
http://www.openismus.com/documents/linux/automake/automake.shtml
【讨论】:
make 的真正替代品,因为它最终会生成 GNUMakefile。因此,您现在不仅可以使用晦涩难懂的 makefile 语法,还可以使用相当老式的 shell 脚本和 m4 宏作为锦上添花!换句话说,现在你有三个个问题。
如果您正在寻找完全不同的东西,Ant。我自己对此并不感兴趣,但它确实提供了一些可移植性优势(不依赖于 unix shell 等)
【讨论】:
我听说过关于Jam 的好消息。
【讨论】:
OMake 是一个用于 C/C++、OCaml 和 LaTeX 的构建工具,具有自动依赖关系分析功能。它可以轻松地在多个目录上构建项目,并且基于 MD5 总和而不是时间戳来查找更改。它还有一种可以在后台运行的模式,只要文件被修改,就可以构建你的项目。通常,与 make 相比,构建常见类型的项目(C/C++ 或 OCaml 程序和库)所需的代码更少。我还没有为更大的项目尝试过。
请注意,如果您想在 OCaml 中编程,此工具非常有用,因为 OCaml 链接器要求已编译的模块以依赖顺序出现在命令行中,并且每次发生更改时弄清楚此顺序并非易事。
【讨论】:
我在我的更多项目中使用了 CMake,包括移植一些基于自动工具的项目,我可以说它做得很好。主要适用于 C/C++ 跨平台项目。
【讨论】:
我正在处理的项目继承了一些使用 Cons 而不是 Make 的代码(不要与 Greg Hewgill 的回答中的 SCons 混淆)。
Cons 是用 Perl 编写的,就像 SCons 是用 Python 编写的。它自动管理依赖关系,您可以使用构建脚本中的任何 Perl 代码来处理复杂的构建序列。
主要缺点(也是我很抱歉我的项目使用它的主要原因)是Cons 没有以make -j 的样式进行并行构建。如果您正在编译多个不相互依赖的文件,Cons 将一次编译一个,而make -j 将并行编译它们,如果您有多个内核和线程,那就太好了机器。
【讨论】:
另一个跨平台构建的 make 是 kmake(kbuild 的一部分,用它自己的话来说:kBuild 是一个 makefile 框架,用于为复杂的任务编写简单的 makefile。)。它是 GNU make 的增强版。它是由 VirtualBox 开发的。他们使用它来构建适用于 Windows、Linux、MacOS 和 Solaris 的 VirtualBox 产品。非常便携!
【讨论】:
WAF 是一个有趣的选择。用 python 编写,它允许你用普通的 Python 编写构建逻辑。并行构建 + 基于签名的半自动魔术依赖跟踪工作得相当好。它应该是跨平台的(即知道如何在 Windows 上进行构建),但我还没有尝试过。
它的学习曲线相当陡峭,但它还附带"The WAF book" 以帮助完成该过程。
【讨论】:
waf 来解决构建问题。在查看了wscript 之后,我不得不深入研究waf 本身的代码。它看起来很奇怪。只是为了好玩,我在最新版本上运行了pep8,它给出了 6000 个错误和 25000 个警告。公平地说,在我刚刚看到的最新版本中,作者添加了很多文档。