尝试新的构造系统 Ninja
Ninja 是 Chrome 项目的构建工具,用来替换经典工具 make,目前这个开源工具已经被很多其它项目采用。据项目作者描述,创建这个新的构建工具,主要是为了提升大型项目的编译速度。
由于 Ninja 的设计目标之一是“必须易于嵌入大型构建系统”,所以,像写 Makfile 那样手写规则文件,并不是它的目标; Ninja 的项目作者说,Ninja 构建文件使用的语言“简单到了不便于人类书写”的程度。Ninja 的规则文件中,并没有条件语句或是基于文件后缀的规则,相反,有的仅仅是一个个列表。这些列表记录了确切的输入文件路径,以及所产生的确切结果。因为这种简单的表达并不需要额外的解释,所以,在运行时,这些规则文件能够被快速载入。
所以,通常情况下,使用 Ninja 时需要一个额外的工具,来实现高层次的构建概念理解。好在已经有很多现成的工具来完成这件事,比如鼎鼎大名 CMAKE,已经可以直接生成 Ninja 的规则文件。
今天实验用到另一个超小的基于 Python 的工具,pyrate-build。项目作者描述它是一个“build file generator targeting Ninja”。
1. 安装
Ninja 并不需要额外的依赖,你可以直接使用相应平台的二进制文件,Linux 或者 Windows;安装不安装的都无所谓。当然,Linux 下最好还是用 apt-get 之类的安装。它的 windows 可执行文件只有 500k。
pyrate-build 的安装更简单,它只需要一个文件。所以,同样的,你也可以直接把它放到编译目录下。或者使用 pip 来安装。
我这里在 Linux 下作的实验,Ninja 是用 apt 装的,pyrate-build 脚本直接放在了编译目录下。
2. 编译
只尝试了 pyrate-build 官网上的实验:
$ 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
尝试新的构造系统 Ninja的更多相关文章
- Google 开发新的开源系统 Fuchsia
google 最新os 下载 https://github.com/fuchsia-mirror/magenta 本文转自:http://www.oschina.net/news/76094/goog ...
- Unity笔记 英保通 Unity新的动画系统Mecanim
Mecanim动画系统是Unity独一无二.强大灵活的人物动画系统.该系统赋予您的人类和非人类人物令人难以置信的自然流畅的动作,使它们栩栩如生.游戏中角色设计提高到了新的层次,在处理人类动画角色中可以 ...
- Unity 5 全局光照GI与新的烘焙系统初探
http://blog.csdn.net/sparrowfc/article/details/45650013 GI是啥 Realtime GI,实时全局光照,听上去就是一个非常高大上的词,但是越高大 ...
- 解决android应用程序适用新老android系统版本方法
老的android系统不能运行高版本系统的新方法,为了解决这个问题: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { ...
- 斯坦福新深度学习系统 NoScope:视频对象检测快1000倍
以作备份,来源http://jiasuhui.com/archives/178954 本文由“新智元”(微信ID:AI_era)编译,来源:dawn.cs.stanford.edu,编译:刘小芹 斯坦 ...
- 新安装ubuntu系统的简单优化
新安装的ubuntu系统,需要做下简单的优化,使其符合常用习惯,优化过程的命令与centos大都不一致,撰文备份,以备所需: 1.获取ubuntu系统root权限 在终端输入sudo passwd r ...
- STM32 Cube之旅-尝试新的开发方式
尝试使用Cube进行一些开发学习,这里对此做一个梗概,先有一个全面的了解. 文章目录 Cube全家桶 CubeMX CubeIDE CubeProg 结语 Cube全家桶 曾几何时,ST刚推出Cube ...
- 在.Net Core 3.0中尝试新的System.Text.Json API
.NET Core 3.0提供了一个名为System.Text.Json的全新命名空间,它支持reader/writer,文档对象模型(DOM)和序列化程序.在此博客文章中,我将介绍它如何工作以及如何 ...
- Centos7.X新安装linux系统基础配置
普通Linux分区方式: /根分区 Linux系统必须要有的,相当于 Windows的C盘,系统程序相关的. /boot分区 存放内核相关程序 是可选的 5 6给200M,7给256M(工作中1-2G ...
随机推荐
- Mex-hdu4747(DP)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4747 题目大意:给一个含有n个数的序列 ns[1~n],定义函数 mex(l,r)为区间 [l,r] 中未 ...
- Java 浮点数精度丢失
Java 浮点数精度丢失 问题引入 昨天帮室友写一个模拟发红包抢红包的程序时,对金额统一使用的 double 来建模,结果发现在实际运行时程序的结果在数值上总是有细微的误差,程序运行的截图: 输入依次 ...
- C# 简单学习正则表达式
第一步先要引入有关正则式的命名空间: using System.Text.RegularExpressions; 第二步用指定的正则式构建一个正则表达式对象,下面的正则式是用来搜 ...
- SpringMVC(二四) 视图解析流程
目标方法无论返回的是string.ModelAndView.View,最终都被解析成modelAndView 关键的实现代码是在springmvc.xml配置文件中定义解析器. 参考代码如下: < ...
- babel那些事儿
从前,一提到新东西,我的反应就是兼容性好不好,如果不能满足产品经理的需求,就还是用保守的方式实现吧.毕竟前端开发是一件很灵活的事,怎么写都行,至于为何会用某种方法,一定是综合考虑兼容性,性能,用户体验 ...
- 主机ssh升级到6.7以上版本后,使用jsch jar包ssh连接不上报Algorithm negotiation fail问题的解决办法
ssh连接问题是由于主机ssh中缺少与jsch jar包匹配的加密算法导致,jsch jar包的默认加密算法貌似是diffie-hellman-group-exchange-sha1. 在目标主机ss ...
- 潭州课堂25班:Ph201805201 django 项目 第二课 git 版本控制 (课堂笔记)
安装 git sudo apt-get install git 查看版本信息: git --version 演示: 创建个项目 创建文件夹 如果要对这个文件夹进行版本控制 先进到这个文件夹中, 命令查 ...
- [NOIp2018提高组]赛道修建
[NOIp2018提高组]赛道修建 题目大意: 给你一棵\(n(n\le5\times10^4)\)个结点的树,从中找出\(m\)个没有公共边的路径,使得第\(m\)长的路径最长.问第\(m\)长的路 ...
- ironic-inspector硬件信息收集
主机上报 ironic-inspector流程会在小系统里收集裸机的硬件信息,然后上报到ironic-conductor. 其中收集硬件信息主要使用hwinfo和lshw命令.Centos可以使用如下 ...
- Drying [POJ3104] [二分答案]
背景 每件衣服都有一定单位水分,在不适用烘干器的情况下,每件衣服每分钟自然流失1个单位水分,但如果使用了烘干机则每分钟流失K个单位水分,但是遗憾是只有1台烘干机,每台烘干机同时只能烘干1件衣服,请问要 ...