学习构建系统

学习构建系统

本文对构建系统相关知识的学习,阅读文章可以学习到下面内容:

​ ●元构建系统和构建系统区别

​ ●cmake和gn等元构建系统

​ ●make和ninja等构建系统

构建系统介绍

make和cmake

编译一份简单的代码,只需要通过gcc等编译工具直接执行源代码就可以获取到编译结果。

例如gcc main.cpp -o test 就可以得到一个名为test的可执行文件。

随着软件工程逐渐变得复杂,一个完整的软件工程有模块划分,有静态库,有动态库,要求链接输出执行文件,通过命令式地使用编译工具已经难以完成编译目标。因此需要用构建系统来定义编译规则,而编译工具按照既定规则去执行。

GNU make和 Ninja就是这种构建系统,它们定义编译规则,这种规则文件分别通过编写makefile文件和.gn文件来表示,可以指定编译器和链接器完成编译生成目标文件。

编译器:gcc, msvc,clang和llvm等。

链接器:lld和llvm等。

在makefile文件所在目录执行make命令,就可以按其规则编译链接。

但是软件规模更大时,编写makefile文件也变得很繁琐,甚至易出纰漏。为了解决这些问题,有了类似cmake这种可以生成makefile的工具。

cmake这种就属于元构建系统,因为要用它来创建构建系统的执行文件makefile。make是构建系统,按makefile定义的规则编译构建软件。

了解了上面这些,我们可以建立起这样的认知:元构建系统生成构建文件,构建系统利用构建文件编译源代码生成目标文件。

安装

在linux系统上,使用常规的安装方法安装cmake和make包就可以了。例如,unbuntu上你可以通过下面命令安装:

1
2
sudo apt-get install cmake
sudo apt-get install make

一个简单的案例

CMakeList.txt 文件:

1
2
3
4
5
cmake_minimum_required(VERSION 3.5)

project(hangtest)

add_executable(hangtest main.cpp)

main.cpp 文件:

1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;

int main()
{
cout << "Hello, World!";
return 0;
}

cmake测试

gn和ninja

上面一节我们已经提到ninja是另外一种构建系统。Ninja 是Google的一名程序员推出的注重速度的构建工具,它被认为用来取代make,按google官方说法它通过并行方式好几倍的提升编译速度。

gn是一种元构建系统,可以生成.ninja文件,实际上cmake也可以生成.ninja文件。ninja可以很好的组合gypCMake一起使用,后者为其生成.ninja文件。

常见构建方案:cmake+ninja构建,gn+ninja构建。

ninja项目的最终编译产出物是一个可执行文件ninja。

安装

ninja 编译需要依赖 re2c,re2c 是一款语法分析器。

1
sudo apt install re2c

ninja工具也可以直接命令安装

1
sudo apt-get install ninja-build

gn安装需要下载源码编译安装, gn的官方源码



关注博客或微信搜索公众号多媒体与图形,获取更多内容,欢迎在公众号留言交流!
扫一扫关注公众号
作者

占航

发布于

2021-02-28

更新于

2023-10-04

许可协议

评论