七大顶尖 C++ 开源构建系统

Blog
Author:
Dori ExtermanDori Exterman
Published On:
4月 26, 2021
Estimated reading time:
1 minute

在本篇博客中,我想介绍七大顶尖的开源 C++ 构建系统。当然,我们并不是简单排名列举,而是要细加分析这些顶级开源 C++ 构建系统是什么,又是为什么能成为顶尖系统。

别告诉我月光很明亮,让我看到那碎玻璃上闪烁的光——安东·契诃夫

我当然成为不了契诃夫,但要赏‘月光’,先从‘玻璃’开始。?

1. Make

Make 无处不在。但这也不难理解,Make 创建于1977 年,在计算机行业的影响深远。Make 广泛适用于所有类 Unix 系统、Macintosh 系统,以及 Windows 的所有版本中,可通过 Cygwin 或本地 nmake 执行。Make 使用简单的文本文件 makefiles 来指导构建。makefile 包含如下规则:

shownottell: show.c tell.c    gcc –o shownottell show.c tell.c

规则包含 Target(目标)和  Recipe(命令)。Target 是文件名,在上面的例子中是 shownottell。分号分隔的是 Prerequisites(依赖文件)。Recipe 行由 shell 命令组成,需要以 Tab  键开始。执行这些shell 命令更新目标,我们要做两件事:

  • Target 是否需要更新?即 Prerequisites 是否需要更改;
  • 如果是,如何更新 Target ?即是否需要运行 Recipe

这就是 Make 的规则。对于简单的项目,Make 构建系统易于实现和维护。随着项目的发展,makefile 会变得非常复杂。尽管年代久远,Make 仍然是构建软件最常用的工具。

2.现代 CMake

现代 CMake Make 的真正继任者。在之前的一系列文章中,我一直在谈论CMake。相关链接如下:

为什么说现代 CMake Make 的继承者?事实胜于雄辩,我把悬念留到CMake 的博客中,大家可以自行研究。但是,我相信,许多新的开源 C++ 项目要么已经在使用,要么正准备使用 CMake 了。点击链接了解 CMake 开源项目。

3. Ninja

一个产品的存在必须有一个独特的卖点(USP)。Ninja 的独特卖点(USP)是对速度的执著。本着“事实为先”的精神,我们先看图:

Ninja - top open source build systems
图片来源

Ninja 是一个小型的开源构建系统,其输入文件由更高级别的构建系统(比如CMake)生成,Ninja 的设计专注速度,高速运行构建。在 Visual Studio 2019 中,可以使用 CMake Ninja 直接构建 Linux 项目。点击链接了解 Ninja 开源项目。

4. SCons

在著作《软件构建系统:原则和经验》中,Peter Smith 深入观察了 SCons,引用他的原话:

“如果你正在编写一个新的 C/C++ 软件构建系统,建议首选 SCons CMake。”

这句话的原文是与 GNU Make了解更多 GNU Make 的信息)进行比较。但是可以清楚地看到,SCons CMake 强有力的竞争对手。SCons 作为一个升级的跨平台开源构建,足以替代经典的 MakeSCons 的配置文件是用 Python 编写的,Python 也是 SCons 的独特卖点(USP,主张使用真正的编程语言来解决构建问题。当前版本的 SCons 需要 Python 版本 3.5 才能运行。点击链接了解 SCons 开源项目。

5. Meson

科技不断发展——我们正在进入粒子物理学时代。? 玩笑归玩笑,Meson 是一个开源的构建系统,速度快,易使用。正如大自然无法忍受真空环境一样,Meson 也无法忍受:

  • 开发人员在编写、调试构建定义上浪费太多时间;
  • 为构建系统开启编译浪费太多时间

Meson 没有使用图灵完备语言(Turing Complete language)编写构架定义。相反,Meson 采用了一种特定语言(DSL),便于使用、非图灵完备,并将成为其独特卖点。Meson 支持多种语言,包括 CC++ RIST,能跨平台进行开源构建。Meson 的默认构建生成器为 Ninja。点击链接了解 Meson 开源项目。

6. MSBuild

Microsoft Build Engine(MSBuild)是用于生成应用程序的平台。不过,这篇博客不是关于七大开源 C++ 构建系统的吗?MSBuild 开源吗?话不多说,先看图:

MSBuild_top open source build tools

是的,在 2015 年底,微软决定对 MSBuild 开源软件开发流程。其第一个版本于 2017 3 7 日发布,并与 Visual Studio 2017 一起打包发行。MSBuild 现在是一个真正的跨平台应用程序,可在支持 .NET Core 的类 Unix 系统上运行。点击链接了解 MSBuild 开源项目。

相关阅读: 什么是 MSBuild

7. Waf

尽管可能很多人都没有听说过 Waf 构建工具,但 Incredibuild 早已抢先集成。WafPython 开源构建工具,支持多种编程语言,如 CC++C 语言、Java 甚至 FortranWaf 是一个用于配置、编译和安装应用程序的框架。我们将展示如何使用 Waf。我利用源代码构建了 Waf,因此我们先来看看其版本:

WAF 1

这里展示的是,我如何构建 Waf  中的 C++  演示项目:

WAF 2

这是我的 wscript 文件, 用于协调构建:

WAF 3

如果你已熟悉 Python,那 Waf 上手也会很快。 点击链接了解 Waf

最后,以《契诃夫法则》结尾:

“第一幕中出现的枪,在第三幕必然会发射。?

这里介绍的每一个工具都有其用途。合理设置并使用,让你的 C++ 项目更有生机,扬长避短,理智谋划。静候佳音。

speed up c++