Ninja 是最近冒出来的一个 build system,它很像 make,然而效率更高,对大项目支持更好。当然我用 Ninja 和效率无关(我又没有那种有几百个中间目标的 C++ 项目要 build),纯粹是因为 mingw-builds 里的 make.exe 对 PATH 的识别有问题而已。

Ninja 使用 build.ninja 文件来定义构建规则。和 Makefile 里的元编程不同,build.ninja 几乎是完全静态的,动态生成依赖其他工具,如 gyp 或者 CMake。下面是我用来构建 typeof.net 的文件:

forceFlags =
rule generate_site
command = moei.cmd ./compile.moe $forceFlags
rule compile_less
command = lessc.cmd $in $out
rule publish_site
command = git push origin master build rc/css/style.css: compile_less rc/css/style.less
build style: phony rc/css/style.css
build all: generate_site style
build force: generate_site style
forceFlags = force
build publish: publish_site default all

是不是感觉有点坑爹?好吧,构建页面的过程是由一个 Moescript 脚本负责的,ninja 文件只是负责把它封装下。在 Ninja 中,每条构建规则由 build 起始,默认规则则由 default 指定。构建规则的形式为:

build 目标文件 : 转换规则 依赖文件a 依赖文件b ...
变量覆写(若有)

转换规则相当于 makefile 里缩进中的命令,但是有更好的控制。Ninja 执行的逻辑是,在希望构建 A: R B C 的时候,先构建依赖文件 BC,然后计算规则 R 得到一组变量,进而执行其中 command 变量指示的命令完成构建。Ninja 的转换规则可以使用一系列的预定义变量,例如 $in 和 $out,表示依赖文件表和输出文件的名字。

由于是优化效率的设计,Ninja 并没有提供很强大的函数功能(对比 make),相比之下 Ninja 的池(Pool)机制可以很好地管理大型项目构建时的并发编译/链接。当然作为一个写 nodejs 的,这种特性也用不上,权当了解了。

小试 Ninja的更多相关文章

  1. 小试ASP.NET MVC——一个邀请页面的实现

    上篇博客我们大体介绍了ASP.NET MVC以及如何去新建项目,这篇博客我们讲点干货.小试ASP.NET MVC,我们来写一个简单的邀请WEB. 先来建立一个Models,叫GuestResponse ...

  2. canvas游戏小试:画一个按方向键移动的圆点

    canvas游戏小试:画一个按方向键移动的圆点   自己对canvas,但又有一颗做游戏的心TT.然后记录一下对canvas的学习吧,用一个按方向键控制的小圆点来做练习.(编程时用了一些es6的语法) ...

  3. hdu 4000Fruit Ninja 树状数组

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  4. struts的hello world小试

    struts的hello world小试 前面jdk的安装和配置,tomcat的安装和配置以及java ide的安装和配置就不写了. 在项目中使用流程 创建一个Web项目 导如struts 2.0.1 ...

  5. Ninja Blocks物联网平台简介

    Ninja Blocks是一个物联网控制平台,其平台架构包括硬件层.处理器层.软件层以及平台层,请看下图: 最底层是硬件层,包括传感器(Sensors)和驱动器(Actuators),例如温度传感器. ...

  6. sdut 2416:Fruit Ninja II(第三届山东省省赛原题,数学题)

    Fruit Ninja II Time Limit: 5000MS Memory limit: 65536K 题目描述 Have you ever played a popular game name ...

  7. Ninja - chromium核心构建工具

    转自:http://guiquanz.me/2014/07/28/a_intro_to_Ninja/ Ninja - chromium核心构建工具Jul 28, 2014 [在线编辑] 缘由 经过上次 ...

  8. SDUT 2416:Fruit Ninja II

    Fruit Ninja II Time Limit: 5000MS Memory limit: 65536K 题目描述 Have you ever played a popular game name ...

  9. 《JavaScript Ninja》之正则表达式

    正则表达式 是一个拆分字符串并查询相关信息的过程. 练习网站:JS Bin 正则表达式测试网站:Regular Expression Test Page for JavaScript 正则表达式进修 ...

随机推荐

  1. [iOS]C语言技术视频-17-指针变量高级用法练习二(使用堆内存完成链表结构的存储)

    下载地址: 链接: http://pan.baidu.com/s/1kTmwIYr 密码: j7xq

  2. pcap filter

    今天用tshark抓包,本以为wireshark能用的filter,如“mysql”它也应该能用,其实不然:tshark -f只认识pcap filter,用-R的话,说要用-2,加上-2的话又说什么 ...

  3. IFeatureLayer

      All Properties Methods Inherited Non-inherited Description AreaOfInterest The default area of inte ...

  4. 改变cinder默认vg的方法

    在存储节点:# pvcreate /dev/sdb# vgcreate vg100gb /dev/sdb # openstack-config --set /etc/cinder/cinder.con ...

  5. CodeForces 581D Three Logos

    爆搜. #include<cstdio> #include<string.h> #include<math.h> #include<queue> #in ...

  6. dedecms如何修改共0页/0条记录为英文版?

    近日,在测试一个网站功能的时候,发现在搜索结果的下面为中文的“共0页/0条记录”,但客户的网站为英文版,所以我们需要将搜索的结果信息也要显示为英文,好了,我们开始动手修改dedecms的文件,以达到我 ...

  7. MySQL 导出命令

    mysqldump --no-defaults -u root -p dbname > c:\www\test.sql windows 下使用.

  8. MRC的下setter访问器的两种形式

    // Person复合了Phone和Room // 第一种:比较合理 先判断对象形参传递的对象和原属性是否一致,不一致在释放旧值,给形参传递的值retain,因为retain方法会返回该对象,因此可以 ...

  9. CodeForces 621C Wet Shark and Flowers

    方法可以转化一下,先计算每一个鲨鱼在自己范围内的数能被所给素数整除的个数有几个,从而得到能被整除的概率,设为f1,不能被整除的概率设为f2. 然后计算每相邻两只鲨鱼能获得钱的期望概率,f=w[id1] ...

  10. 源码解析-knockout源码准备

    准备包括心理和资源两方面. 心理 我看过一句话说,当你用一个框架时,不要忙着看一遍使用教程就开始写项目,先去看看框架原理. 这句话我深以为然.现今前端快速发展,很多前端攻城狮都很茫然:框架更新太快了, ...