为什么没有人为脑死亡创建一个开源构建系统?

时间:2009-10-20 17:55:33

标签: build autotools configure waf

我想构建一个共享库。 GNU / Linux是开发和目标平台。 C是实现语言。

我无法决定如何设置构建系统并继续围绕三个选项,每个选项都有很多不喜欢的理由:

  • 手工制作Makefiles - 我几乎完全以这种方式工作
  • GNU Autotools - 我今年早些时候使用autotools来构建一个共享的C库,但是忘记了我是如何做到这一点的,以及我用于挑选的所有数百个教程。
  • waf - 据说简单但不那么容易我今天下午工作了。

我无法决定去哪一个。我会选择一个,开始工作然后遇到问题,并决定其他系统更好。我卡住了卡住了。有人可以解释一下这可能有助于我解决这个问题吗?

4 个答案:

答案 0 :(得分:17)

以下是我多年来注意到的工具的一些链接(以及网站的引用):

PreMake:您是软件项目的经理。您的用户要求您提供Visual Studio工作区文件,但您没有Visual Studio!或许您是一名Windows开发人员,正在努力使Makefile与Linux端口保持同步。这是开源项目的常见问题:将用户限制为单个构建工具 - 驱逐潜在的贡献者 - 或手动维护两组,三组或更多组构建脚本。输入Premake。

CMake:欢迎使用CMake,这是一个跨平台的开源构建系统。 CMake是一系列用于构建,测试和打包软件的工具。 CMake用于使用简单的平台和独立于编译器的配置文件来控制软件编译过程。 CMake生成本机makefile和工作区,可以在您选择的编译环境中使用。

buildconf:它起初只是一个小编译准备脚本......多年来,它已经发展成为一个非常有用的实用程序,通过支持请求和跨平台编译节省了我的时间和精力。它是通常在使用GNU构建系统的项目中经常发现的相同类型的脚本 - 也称为GNU Autotools,或者单独用作Autoconf,Automake和Libtool的每个工具。这些项目经常编写一个自定义帮助程序脚本,为其项目开发人员准备构建系统,通常运行各种工具,如libtoolize,autoconf或autoreconf。此脚本通常命名为buildconf或autogen.sh,但意图相同:准备构建系统以进行编译

BSDBuild:BSDBuild(以前称为csoft-mk)是一个简单,自包含且可移植的构建系统,派生自传统的4.4BSD共享/ mk文件。 BSDBuild允许使用BSD样式的makefile,但没有BSD make扩展(它使用标准的Bourne脚本片段),因此构建系统可以移植到大多数操作系统并制作风格。

iCompile:iCompile零配置构建系统

OMake :( OCaml)OMake是一个专为可扩展性和可移植性而设计的构建系统。

BakeFile:Bakefile是跨平台,交叉编译的本机makefile生成器。它将构建任务的编译器独立描述作为输入,并生成本机makefile(autoconf的Makefile.in,Visual C ++项目,bcc makefile等)。

SCons是一个开源软件构建工具 - 即下一代构建工具。将SCons视为经典Make实用程序的改进,跨平台替代,具有与autoconf/automake类似的集成功能和ccache等编译器缓存。简而言之,SCons是一种更简单,更可靠,更快速的软件构建方式。

Make project:'Make project'是一个生成项目骨架的bash脚本。它使用命令行提供的信息自动执行启动新项目的任务。默认情况下创建的包是所选骨架的“hello world”项目,它使用自动工具进行管理。

未维护或死亡的项目(07-2012)

cppmake:与手动编写makefile相比,Cppmake是一个能够更轻松,更准确地构建C ++程序的前端。

spray:Spray是一个帮助您配置,构建和安装项目的构建工具它与autotools或CMake的目的相似,但是使用Python编程语言遵循SCons和waf的精神创建。 / p>

答案 1 :(得分:7)

嗯:所有系统都很糟糕。一些只是吮吸更少。正如mutt邮件所述。那说了一些快速评论:

  • Qt非常好,文档齐全,我喜欢创建的.pro文件。此外,它是可靠的跨平台预订,如果您需要,您现在可以获得IDE等。
  • CMake是我们在工作中使用的,它也是跨平台的,人们可以习惯它,但我仍然觉得它古怪。
  • GNU Autoconf et al是我用于项目的内容。古怪,但我已经习惯了它和Intertubes上的大量工作实例。
  • Scons也许吧?

答案 2 :(得分:6)

由于构建系统的目的是将库安装到目标系统中,因此您应该使用该软件所熟悉的每个安装的通用工具。

因此构建系统的主要目的是灵活的配置功能。<​​/ p>

每个人都可以使用CMakeAutotools。坚持下去。

答案 3 :(得分:1)

我经常使用mkproject(Make Project)。这是人们建议使用的简单的autotools东西,但它确实加载了你的默认配置,就像一个IDE项目生成器,非常理智的最小但有用的默认值。剩下的由你来管理,只需简单的autotools(info configure,info autoconf,info automake就是你的助手,mkproject严格按照这种方式进行管理)。

你总是用一些基本程序启动一个项目,编辑一个configure.ac编辑一个Makefile.am,...,mkproject就是这样做而不会侵入autotools层或添加新语法。很酷的是,它通过参数从头开始个性化您的autotools项目,节省时间和错误。

如果你使用autotools并生成随机/很多项目,试一试,它附带man和info页面,甚至网站也会告诉你如何使用它。