【问题标题】:Alternatives to make for linux/freebsd? [closed]为 linux/freebsd 制作的替代品? [关闭]
【发布时间】:2010-09-28 05:13:57
【问题描述】:

对于 linux/freebsd,make 有哪些替代品?

【问题讨论】:

    标签: linux makefile freebsd


    【解决方案1】:

    我喜欢SCons。它的构造方式使得每个构建脚本(SConstruct 文件)也是语法上有效的 Python 程序。因此,如果需要,您可以在构建脚本中构建任意 Python 逻辑。

    它也比make快得多,并且自动计算多种依赖关系。

    【讨论】:

    • '对不起我?比制造快?你在什么古老的硬件上运行?上次我查看时,SCons 有严重的性能问题。除此之外,我喜欢 SCons。
    【解决方案2】:

    我的第一个问题是,观众是什么。这是为了构建只有您的团队才能构建的内部软件吗?如果是这样,请探索一些已经提出的选项。如果这是其他人将要构建的东西,要么坚持使用 make,要么使用创建 makefile 的工具并发布它们。我们在 Linux 和其他 unix 平台上使用 autoconf 和 automake。在我看来,你需要一个很好的理由来做除了配置之外的事情;制作;进行安装。 Boost 有自己的工具(Jam 的修改版本),每次我需要尝试让它在不寻常的机器上编译时,它都会让我很烦恼。

    【讨论】:

      【解决方案3】:

      cmakeimake 都是构建实用程序,尽管不再维护 Imake。 Cmake 也是跨平台的,也可以在 Windows 上使用。

      如果您喜欢 Java,ANT 是一个面向 Java 的构建工具(它不能很好地与 Make 配合使用)。

      Troll 技术人员制作了一个名为 qmake 的工具,他们用它来构建 QT。它通过生成 makefile 来工作 - Troll 需要一个工具来支持跨平台构建 - 所以你仍然需要另一个 make 实用程序。

      【讨论】:

      • 奇趣科技已经从 qmake 转移到 cmake,所以我会选择后者而不是前者。 CMake 为各种 IDE 生成与 IDE 项目一样多的 makefile。
      • @dribeas 说得对,QT,我相信整个 KDE 项目都转移到了 CMake。
      • 我不知道你为什么在同一个句子中提到cmake和imake...
      【解决方案4】:

      Automake :p 常用于大多数 linux 应用程序发行版,但它比 Makefile 提供更多的工作,但效果更好http://www.gnu.org/software/automake/

      http://www.openismus.com/documents/linux/automake/automake.shtml

      【讨论】:

      • Autotools 并不是make 的真正替代品,因为它最终会生成 GNUMakefile。因此,您现在不仅可以使用晦涩难懂的 makefile 语法,还可以使用相当老式的 shell 脚本和 m4 宏作为锦上添花!换句话说,现在你有三个个问题。
      【解决方案5】:

      如果您正在寻找完全不同的东西,Ant。我自己对此并不感兴趣,但它确实提供了一些可移植性优势(不依赖于 unix shell 等)

      【讨论】:

        【解决方案6】:

        我听说过关于Jam 的好消息。

        【讨论】:

        • 该链接指向来自 Perforce Jam 的 Freetype Jam。同样来自 Perforce Jam 的是 Boost Jam,值得一看。我已经使用 Jam 超过 10 年了;我也推荐它。
        【解决方案7】:

        OMake 是一个用于 C/C++、OCaml 和 LaTeX 的构建工具,具有自动依赖关系分析功能。它可以轻松地在多个目录上构建项目,并且基于 MD5 总和而不是时间戳来查找更改。它还有一种可以在后台运行的模式,只要文件被修改,就可以构建你的项目。通常,与 make 相比,构建常见类型的项目(C/C++ 或 OCaml 程序和库)所需的代码更少。我还没有为更大的项目尝试过。

        请注意,如果您想在 OCaml 中编程,此工具非常有用,因为 OCaml 链接器要求已编译的模块以依赖顺序出现在命令行中,并且每次发生更改时弄清楚此顺序并非易事。

        【讨论】:

          【解决方案8】:

          我在我的更多项目中使用了 CMake,包括移植一些基于自动工具的项目,我可以说它做得很好。主要适用于 C/C++ 跨平台项目。

          【讨论】:

            【解决方案9】:

            我正在处理的项目继承了一些使用 Cons 而不是 Make 的代码(不要与 Greg Hewgill 的回答中的 SCons 混淆)。

            Cons 是用 Perl 编写的,就像 SCons 是用 Python 编写的。它自动管理依赖关系,您可以使用构建脚本中的任何 Perl 代码来处理复杂的构建序列。

            主要缺点(也是我很抱歉我的项目使用它的主要原因)是Cons 没有以make -j 的样式进行并行构建。如果您正在编译多个不相互依赖的文件,Cons 将一次编译一个,而make -j 将并行编译它们,如果您有多个内核和线程,那就太好了机器。

            【讨论】:

            • 不幸的是,缺点似乎是一个死项目;我上次看时没有当前的发展。
            【解决方案10】:

            另一个跨平台构建的 make 是 kmakekbuild 的一部分,用它自己的话来说:kBuild 是一个 makefile 框架,用于为复杂的任务编写简单的 makefile。)。它是 GNU make 的增强版。它是由 VirtualBox 开发的。他们使用它来构建适用于 Windows、Linux、MacOS 和 Solaris 的 VirtualBox 产品。非常便携!

            详情请见http://svn.netlabs.org/kbuild

            【讨论】:

              【解决方案11】:

              WAF 是一个有趣的选择。用 python 编写,它允许你用普通的 Python 编写构建逻辑。并行构建 + 基于签名的半自动魔术依赖跟踪工作得相当好。它应该是跨平台的(即知道如何在 Windows 上进行构建),但我还没有尝试过。

              它的学习曲线相当陡峭,但它还附带"The WAF book" 以帮助完成该过程。

              【讨论】:

              • 前段时间我不得不查看waf 来解决构建问题。在查看了wscript 之后,我不得不深入研究waf 本身的代码。它看起来很奇怪。只是为了好玩,我在最新版本上运行了pep8,它给出了 6000 个错误和 25000 个警告。公平地说,在我刚刚看到的最新版本中,作者添加了很多文档。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-06-16
              • 2011-06-16
              • 2011-12-17
              • 2010-10-21
              • 2010-12-17
              • 1970-01-01
              相关资源
              最近更新 更多