为 linux/freebsd制作哪些替代品?
11 回答
我喜欢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 <--关于如何使用 automake 和 autoconf 的很好的解释
如果您正在寻找完全不同的东西,那就是Ant。我自己对此并不感兴趣,但它确实提供了一些可移植性优势(不依赖于 unix shell 等)
我听说过有关Jam的好消息。
OMake是一个用于 C/C++、OCaml 和 LaTeX 的构建工具,具有自动依赖分析功能。它可以轻松地在多个目录上构建项目,并根据 MD5 总和而不是时间戳来查找更改。它还有一种可以在后台运行的模式,只要文件被修改,就可以构建您的项目。通常,与 make 相比,构建常见类型的项目(C/C++ 或 OCaml 程序和库)所需的代码更少。我还没有为更大的项目尝试过。
请注意,如果您想在 OCaml 中编程,此工具非常有用,因为 OCaml 链接器要求编译后的模块以依赖顺序出现在命令行中,并且每次发生更改时弄清楚此顺序并非易事。
我在我的更多项目中使用了 CMake,包括移植一些基于自动工具的项目,我可以说它做得很好。它主要适用于 C/C++ 跨平台项目。
我正在处理的项目继承了一些使用Cons
而不是的代码Make
(不要与SCons
Greg Hewgill 的回答混淆)。
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 产品。相当便携!
有关详细信息,请参阅http://svn.netlabs.org/kbuild。
WAF是一个有趣的替代方案。用 python 编写,它允许你用普通的 Python 编写构建逻辑。并行构建 + 基于签名的半自动魔术依赖跟踪工作得相当好。它应该是跨平台的(即知道如何在 Windows 上进行构建),但我还没有尝试过。
它有一个相当陡峭的学习曲线,但它还附带“The WAF book”来帮助这个过程。