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. git使用时遭遇the authenticity of host can't be established

    修改/etc/ssh/ssh_config文件的配置,以后则不会再出现此问题 最后面添加: StrictHostKeyChecking no UserKnownHostsFile /dev/null

  2. 利用MyEclipse连接数据库并自动生成基于注解或者XML的实体类

    一.利用MyEclipse连接数据库 1. 打开MyEclipse的数据库连接视图 然后在Other中找到"MyEclipse Database"中的DB Browser 2. 在 ...

  3. 定时且周期性的任务研究II--ScheduledThreadPoolExecutor

    http://victorzhzh.iteye.com/blog/1011635 上一篇中我们看到了Timer的不足之处,本篇我们将围绕这些不足之处看看ScheduledThreadPoolExecu ...

  4. 水流(water)

    水流(water) 题目描述 全球气候变暖,小镇A面临水灾,于是你必须买一些泵把水抽走.泵的抽水能力可以认为是无穷大,但你必须把泵放在合适的位置,从而能使所有的水能流到泵里.小镇可以认为是N×M的矩阵 ...

  5. 织梦系统与discuz论坛整合方法

    如何完成dedecms模板系统与discuz论坛整合呢? 这里的整合指会员信息,会员登陆.退出的同步:论坛信息的引用:等等. 首先,我们先来安装织梦(dedecms)系统. 然后,我们在网站根目录下建 ...

  6. Inside dependency property

    依赖属性的定义,分为3步(以PresentationFramework中的System.Windows.Controls.Button为例) 1.  声明依赖属性 public static read ...

  7. Js apply call方法详解

    Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这 ...

  8. 通过 File API 使用 JavaScript 读取文件

    原文地址:http://www.html5rocks.com/zh/tutorials/file/dndfiles/ 简介 HTML5 终于为我们提供了一种通过 File API 规范与本地文件交互的 ...

  9. Java将List/JavaBean转成Json

    import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.util.List; /**  *  ...

  10. NSURLRequest POST方式请求服务器示例

    http://lizhuang.iteye.com/blog/1833297 1.  准备阶段 NSString *urlString = [NSString stringWithFormat:@&q ...