小试 Ninja
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 的时候,先构建依赖文件 B、C,然后计算规则 R 得到一组变量,进而执行其中 command 变量指示的命令完成构建。Ninja 的转换规则可以使用一系列的预定义变量,例如 $in 和 $out,表示依赖文件表和输出文件的名字。
由于是优化效率的设计,Ninja 并没有提供很强大的函数功能(对比 make),相比之下 Ninja 的池(Pool)机制可以很好地管理大型项目构建时的并发编译/链接。当然作为一个写 nodejs 的,这种特性也用不上,权当了解了。
小试 Ninja的更多相关文章
- 小试ASP.NET MVC——一个邀请页面的实现
上篇博客我们大体介绍了ASP.NET MVC以及如何去新建项目,这篇博客我们讲点干货.小试ASP.NET MVC,我们来写一个简单的邀请WEB. 先来建立一个Models,叫GuestResponse ...
- canvas游戏小试:画一个按方向键移动的圆点
canvas游戏小试:画一个按方向键移动的圆点 自己对canvas,但又有一颗做游戏的心TT.然后记录一下对canvas的学习吧,用一个按方向键控制的小圆点来做练习.(编程时用了一些es6的语法) ...
- hdu 4000Fruit Ninja 树状数组
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- struts的hello world小试
struts的hello world小试 前面jdk的安装和配置,tomcat的安装和配置以及java ide的安装和配置就不写了. 在项目中使用流程 创建一个Web项目 导如struts 2.0.1 ...
- Ninja Blocks物联网平台简介
Ninja Blocks是一个物联网控制平台,其平台架构包括硬件层.处理器层.软件层以及平台层,请看下图: 最底层是硬件层,包括传感器(Sensors)和驱动器(Actuators),例如温度传感器. ...
- sdut 2416:Fruit Ninja II(第三届山东省省赛原题,数学题)
Fruit Ninja II Time Limit: 5000MS Memory limit: 65536K 题目描述 Have you ever played a popular game name ...
- Ninja - chromium核心构建工具
转自:http://guiquanz.me/2014/07/28/a_intro_to_Ninja/ Ninja - chromium核心构建工具Jul 28, 2014 [在线编辑] 缘由 经过上次 ...
- SDUT 2416:Fruit Ninja II
Fruit Ninja II Time Limit: 5000MS Memory limit: 65536K 题目描述 Have you ever played a popular game name ...
- 《JavaScript Ninja》之正则表达式
正则表达式 是一个拆分字符串并查询相关信息的过程. 练习网站:JS Bin 正则表达式测试网站:Regular Expression Test Page for JavaScript 正则表达式进修 ...
随机推荐
- CSS中绝对定位依据谁进行定位?
结论 绝对定位的top等的依据元素需满足3个条件: 已定位(position:relative/fixed/absolute) 最近的 祖辈元素(一定是祖辈元素不是同辈元素) 说明 一般会为body设 ...
- android usb挂载分析---MountService启动
android usb挂载分析---MountService启动 分类: android框架 u盘挂载2012-03-27 23:00 11799人阅读 评论(4) 收藏 举报 androidsock ...
- locks
grep 'parking to wait for' gs2_jstack_141203.txt | uniq -c | sort -n查看哪个锁出现次数最多 http://blog.csdn.ne ...
- RAD Studio 2010 环境设置(转)
源:RAD Studio 2010 环境设置 最近在使用RAD Studio 2010做一些开发和实验,但在安装了自定义的控件及第三方下载的控件后,在我的工程里经常会提示找不到DCU,为了以后忘记这一 ...
- js动画(三)
咳咳咳咳,感冒了感冒了,鼻塞,蓝瘦啊!嘴巴也开裂,哎,心疼自己.想到这是第三只唇膏了!只怪,放荡不倔爱自由, 行驶在冷风路上么,北风那个吹啊吹啊吹啊,好了,发神经发完了,接下来进入正题,严肃脸.(字数 ...
- 使用RGBa和Filter实现不影响子元素的CSS透明背景
点击查看原文 问题 如果我们想要一个元素拥有半透明的背景,我们有两个选择: 使用CSS和 opacity 做一张 24-bit PNG 背景图片 在CSS中使用opacity有两个问题,一是为了适应所 ...
- 基于LNMP的Zabbbix之PHP源码安装
安装一些依赖的包 wget -c ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz .tar.gz -C ../source/ cd ../source/l ...
- 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX应用程序
http://blog.csdn.net/wingfourever/article/details/7726724 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX ...
- mysql优化———第二篇:数据库优化调整参数
摘要 参数调优内容: 1. 内存利用方面 2. 日志控制方面 3.文件IO分配,空间占用方面 4. 其它相关参数 一 摘要 通过参数提高MYSQL的性能.核心思想如下: 1 提高my ...
- 改变导航栏title字体的大小和颜色
方法一:自定义视图的方法 就是在导航向上添加一个titleView,可以使用一个label,再设置label的背景颜色透明,字体什么的设置就很简单了. //自定义标题视图 UILabel *title ...