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

Build 为什么没有人为脑死亡者创建一个开源构建系统?,build,autotools,configure,waf,Build,Autotools,Configure,Waf,我想建立一个共享库。GNU/Linux是开发和目标平台。C是实现语言 我无法决定如何设置构建系统,并不断浏览三个选项,每个选项都有很多不喜欢的原因: 手工制作的Makefiles——我过去几乎完全是这样做的 GNU Autotools-今年早些时候,我使用Autotools构建了一个共享的C库,但是我忘记了我是如何做到的,以及我在哪里使用了数百个教程来挑选 waf-应该很简单,但不是那么容易,我今天下午就开始工作了 我不能决定选哪一个。我会选择一个,开始工作,然后遇到问题,然后决定另一个系统

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

我无法决定如何设置构建系统,并不断浏览三个选项,每个选项都有很多不喜欢的原因:

  • 手工制作的Makefiles——我过去几乎完全是这样做的
  • GNU Autotools-今年早些时候,我使用Autotools构建了一个共享的C库,但是我忘记了我是如何做到的,以及我在哪里使用了数百个教程来挑选
  • waf-应该很简单,但不是那么容易,我今天下午就开始工作了
我不能决定选哪一个。我会选择一个,开始工作,然后遇到问题,然后决定另一个系统更好。我被卡住了。有人能解释一下这件事吗?也许能帮我解决这个问题。

嗯:所有的系统都很糟糕。有些只是吸得少一些。正如mutt mailer所说。尽管如此,还是有一些简短的评论:

  • 非常好,文档也很好,我喜欢创建的.pro文件。另外,它是可靠的跨平台预订,如果您需要,您现在可以获得IDE等
  • 这是我们在工作中使用的,也是跨平台的,人们可以习惯它,但我仍然觉得它很奇怪
  • 是我在项目中使用的。奇怪,但我已经习惯了它和数不清的Intertube工作示例
  • 也许吧
由于构建系统的目的是将库安装到目标系统中,因此您应该使用每个安装软件的人都熟悉的通用工具之一

因此,构建系统的主要目的是灵活配置功能

每个人都可以使用的是和。坚持使用这些工具。

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

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

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

:它一开始只是一个小的构建准备脚本。。。经过多年的发展,它已经成为一个非常有用的实用工具,在支持请求和跨平台编译方面为我节省了时间和精力。这是在使用GNU构建系统的项目中常见的相同类型的脚本——也被称为GNU自动工具,或者每个工具分别称为Autoconf、Automake和Libtool。这些项目通常会编写一个定制的助手脚本,为项目的开发人员准备构建系统,通常运行各种工具,如libtoolize、autoconf或autoeconf。该脚本通常被命名为buildconf或autogen.sh,但其目的是相同的:为编译准备构建系统

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

:i编译零配置生成系统

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

:Bakefile是跨平台、跨编译器的本机makefiles生成器。它以编译无关的描述生成任务作为输入,生成原生的MaFrm文件(AutoCONF的MaFiFi.In,Visual C++项目,BCC MaMax文件等)。 是一个开源软件构建工具,即下一代构建工具。可以将SCON视为经典的
Make
实用程序的改进的跨平台替代品,其集成功能类似于
autoconf/automake
和编译器缓存,如
ccache
。简而言之,SCons是一种更简单、更可靠、更快的软件构建方法

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

未维护或失效项目(07-2012)

:Cppmake是一个前端,它使编写C++程序的工作量和精度比手工编写MaCH文件要低。 :Spray是一个构建工具,可帮助您配置、构建和安装项目。它的用途与autotools或CMake类似,但它是按照SCons和waf的精神使用Python编程语言创建的。

我经常使用mkproject()。这是人们建议使用的简单的自动工具,但它确实加载了您的默认配置,有点像IDE项目生成器,非常合理的最小但有用的默认值。剩下的就由您通过简单的自动工具来管理了(信息配置、信息自动配置、信息自动生成是您的助手,mkproject严格遵循这一点)

您总是使用一些基本过程启动项目,编辑configure.ac编辑Makefile.am,…,mkproject在不侵入autotools层或添加新语法的情况下实现这一点。最酷的是,通过参数,它可以从零开始个性化您的autotools项目,节省时间和错误<