GN环境搭建

GN是一种元构建系统(Meta Build System),而ninja是一个注重速度的构建系统。ninja通常与元构建系统一并使用。常见的有:cmake + make cmake + ninja gn + ninja 。本文要介绍的是gn + ninja的构建方式。

ninja安装

ninja安装有两种途径,一是通过ubuntu自带的软件库安装,另一个是从GitHub上下载ninja源码自己编译。本文是直接在Ubuntu中下载,如想自己编译,可以根据GitHub上的README.md进行操作。

$ sudo apt install ninja-build

安装完毕后,查询版本,显示出版本号后,说明安装成功。

$ ninja --version
1.10.0

GN安装

1. 安装clang

编译gn需要编译器支持C++17的特性,所以编译器的版本不能太低,经过测试clang至少需要8.0的版本。

$ sudo apt install clang-8

同样的,安装完之后,查询下版本号

$ clang-8 --version
clang version 8.0.0-3~ubuntu18.04.2 (tags/RELEASE_800/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

注意到,此时我们输入的命令是clang-8而不是clang,要直接使用clang需要去/usr/bin目录下加入软链接:

$ sudo ln -s ../lib/llvm-8/bin/clang clang
$ sudo ln -s ../lib/llvm-8/bin/clang++ clang++

注意,如果系统本身安装过旧版本的clang,可能会提示failed to create symbolic link 'clang': File exists,此时要么rm -rf clang删除, 要么把上述命令改为ln -snf ../lib/llvm-8/bin/clang clang

修改之后,如下所示,此时再用clang-8就只需要输入clang即可

/usr/bin $ ll|grep clang
lrwxrwxrwx 1 root   root          23 Nov 25 14:04 clang -> ../lib/llvm-8/bin/clang*
lrwxrwxrwx 1 root   root          25 Nov 25 14:04 clang++ -> ../lib/llvm-8/bin/clang++*
lrwxrwxrwx 1 root   root          25 Dec 10  2019 clang++-8 -> ../lib/llvm-8/bin/clang++*
lrwxrwxrwx 1 root   root          23 Dec 10  2019 clang-8 -> ../lib/llvm-8/bin/clang*
lrwxrwxrwx 1 root   root          27 Dec 10  2019 clang-cpp-8 -> ../lib/llvm-8/bin/clang-cpp*
$ clang --version
clang version 8.0.0-3~ubuntu18.04.2 (tags/RELEASE_800/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

2. 安装gn

gn的源码可以从两个地方下载,google官方的需要科学上网,另一个就是GitHub上有fork的仓库,GitHub也上不去的话,就用鸿蒙提供的Gitee的仓库
官方源: https://gn.googlesource.com/gn
Github: https://github.com/timniederhausen/gn
Gitee: https://gitee.com/openharmony/third_party_gn

git下来代码后,进行编译

$ cd gn
$ python build/gen.py
$ ninja -C out

等待编译结束,跑一下gn的测试代码,显示passed说明gn功能没问题

$ ./out/gn_unittests
[682/682] ImportantFileWriterTest.Basic
PASSED

编译成功后,将gn复制到/usr/bin目录下

$ sudo cp ./out/gn /usr/bin

在任意终端中,输入gn help检测gn是否安装成功

$ gn help

Commands (type "gn help <command>" for more help):
  analyze: Analyze which targets are affected by a list of files.
  args: Display or configure arguments declared by the build.
  check: Check header dependencies.
  clean: Cleans the output directory.
  clean_stale: Cleans the stale output files from the output directory.
...

3. 用gn和ninja编译例程

在gn仓库中,自带一个例程,路径为gn/example/simple_build

$ cd ./example/simple_build   #已在gn仓库目录下
$ gn gen out
Done. Made 3 targets from 4 files in 61ms
$ ninja -C out
ninja: Entering directory `out'
[6/6] LINK hello

运行我们通过gn和ninja编译的程序

$ ./out/hello
Hello, world

至此,我们可以愉快地使用gn来编译代码啦。

本文仅用于本人学习笔记之用,部分内容来源网上,如有侵权,请联系博主删除。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值