尝试新的构造系统 Ninja

Ninja 是 Chrome 项目的构建工具,用来替换经典工具 make,目前这个开源工具已经被不少其它项目采用。据项目做者描述,建立这个新的构建工具,主要是为了提高大型项目的编译速度。python

因为 Ninja 的设计目标之一是“必须易于嵌入大型构建系统”,因此,像写 Makfile 那样手写规则文件,并非它的目标; Ninja 的项目做者说,Ninja 构建文件使用的语言“简单到了不便于人类书写”的程度。Ninja 的规则文件中,并无条件语句或是基于文件后缀的规则,相反,有的仅仅是一个个列表。这些列表记录了确切的输入文件路径,以及所产生的确切结果。由于这种简单的表达并不须要额外的解释,因此,在运行时,这些规则文件可以被快速载入。 windows

因此,一般状况下,使用 Ninja 时须要一个额外的工具,来实现高层次的构建概念理解。好在已经有不少现成的工具来完成这件事,好比鼎鼎大名 CMAKE,已经能够直接生成 Ninja 的规则文件。工具

今天实验用到另外一个超小的基于 Python 的工具,pyrate-build。项目做者描述它是一个“build file generator targeting Ninja”。ui

 

1. 安装spa

Ninja 并不须要额外的依赖,你能够直接使用相应平台的二进制文件,Linux 或者 Windows;安装不安装的都无所谓。固然,Linux 下最好仍是用 apt-get 之类的安装。它的 windows  可执行文件只有 500k。设计

pyrate-build 的安装更简单,它只须要一个文件。因此,一样的,你也能够直接把它放到编译目录下。或者使用 pip 来安装。code

我这里在 Linux 下做的实验,Ninja 是用 apt 装的,pyrate-build 脚本直接放在了编译目录下。blog

 

2. 编译ip

只尝试了 pyrate-build 官网上的实验:get

$ echo -e '#include <cstdio>\nint main() { printf("Ahoy World!"); return 0; }' > test.cpp
$ echo -e "executable('test', 'test.cpp')" > build.py
$ python pyrate build.py
$ ninja
$ ./test

而后,修改了 build 目录,对 build.py 作了简单修改。

default_context.basepath = 'build'
default_context.basepath_object_file = 'build/obj'
executable('test', 'test.cpp')

固然,指定目录彷佛还有不少其余的方式,暂不做深刻研究。

 

因此,若是你在 windows 下组织一个独立于 IDE 的新项目,你只须要一个 500k 的二进制文件,以及一个 python 脚本,就能够轻松组织构建啦~

 

想用 Ninja 做为单片机的构建工具,可是供应商的编译器不支持生成 depfile,因此考虑先使用 gcc 做为 depfile 的生成工具。下面的脚本实验可行,考虑有空了进行整合:

CC = C:\Tools\mingw\bin\gcc
source_path=..\02_SW\01_Sources\
opts=-MMD -MF
CC_FLAGS = -I$source_path\02_MCAL\ -I$source_path\03_MCAL_generated -I$source_path\04_OS -MM
rule dep_gen
  command = $CC $CC_FLAGS $in $opts $out
  description = dep_gen(c) $out

build build/obj/Adc.c.d: dep_gen $source_path\02_MCAL\Adc.c
build build/obj/Base.c.d: dep_gen $source_path\02_MCAL\Base.c
相关文章
相关标签/搜索