什么是Ninja

Ninja是使用C++写的开源项目。

http://martine.github.io/ninja/

在Unix/Linux下通常使用Makefile来控制代码的编译,但是Makefile对于比较大的项目有时候会比较慢,看看上面那副漫画,代码在编译都变成了程序员放松的借口了。所以这个Google的程序员在开发Chrome的时候因为忍受不了Makefile的速度,自己重新开发出来一套新的控制编译的工具叫作Ninja,Ninja相对于Makefile这套工具更注重于编译速度。除了Chrome现在还有一些其他的比较大的项目也在开始使用Ninja,比如LLVM。我试用了一下感觉还是不错,比如编译Cmake时间大概是原来的1/4。Ninja试用C++实现,其支持的语法非常简单,作者在这里说明了为了控制复杂度。

代码如何编译

其实对于C/C++和很多其他程序的编译都是一个道理,就是把一些源代码文件编译成目标文件,或者有的目标文件再编译到一个库里,然后再链接起来。所以Ninja的配置文件分为两个部分,rule和文件依赖关系。看个简单的例子:

cc=gcc cflags= -g -crule cc command = $cc $cflags $in -o $out rule link command = $cc $in -o $out rule cleanup command = rm -rf *.exe *.obuild func.o           : cc func.c
build main.o           : cc main.cbuild app.exe            : link main.o func.obuild all:  phony || app.exe
build clean: cleanup

非常易懂,编译的可执行未见叫做app.exe, 其中有三条rule: cc, link, cleanup。看看这个官方的试用手册,还有一些附加参数可以加在rule的下面,比如description用来在编译的时候显示出来。Ninja还有个比较好玩的功能就是Ninja -t graph all命令,这可以用来生成编译时候的依赖关系,可以用dot来生成图片等。Ninja的实现也可以大概推测到,根据用户给的依赖关系图,并行 地编译各个文件。

配置文件CMakeLists.txt

使用Ninja的一个问题就是需要生成这个build.ninja文件,对于大型项目来说这样一条一条地写配置文件是不可能的。幸好我们可以使用Cmake来生成这个配置文件,Cmake对应的是automake这样的东西。在Cmake的最新版本中已经支持参数Camke -G Ninja,Cmake会根据用户给定的CMakeLists.txt来生成build.ninja文件。而CmakeLists文件相对来说要简单一些,只要写清楚编译的可执行文件的名字,和其依赖的包含main函数的源文件。把我的迷宫小项目来举个例子,在项目文件夹下写配置文件CMakeLists.txt:

cmake_minimum_required(VERSION 2.8) project (Maze) add_library(maze A_star.cpp Algorithm.cpp DFS_L.cpp DFS_R.cpp DisjSets.cpp Maze.cpp) add_executable(Maze.exe main.cpp) target_link_libraries(Maze.exe maze)

add_library写明了生成一个叫做maze.a的库文件,然后和main.cpp编译出来的main.o生成可执行文件,写好CmakeList.txt后运行Cmake -G Ninja, 然后运行ninja all就能编译这个工程。具体的Cmake语法参考这里,对于不少项目来说Cmake已经足够使用,只是我觉得Cmake还是稍微复杂了一点。


http://www.taodudu.cc/news/show-4233928.html

相关文章:

  • ninja源码下载及编译(Win10+VS2019)
  • ninja 编译threadx(ubuntu)
  • Python VUE3 + Django Ninja的后台管理系统
  • VSCode使用04--C/C++开发环境的搭建(含googletest测试框架)
  • 关于项目编译工具ninja、make、cmake的区别与优劣
  • 麒麟V10SP1的国产化Qt适配
  • GN+NINJA环境搭建(MacOS Windows)
  • Python系列-Django-Ninja
  • Django聚合分组查询(F与Q查询|ORM查询优化|常见字段参数)
  • 多线程编译与运行linux,Linux系统下多线程程序编译makefile文件
  • Ubuntu16.04使用ninja编译安装LLVM
  • centos7.9使用gn+ninja编译程序
  • gcc与cmake、qmake与make、ninja
  • centos7.9编译安装构建系统gn+ninja
  • Ninja基本
  • 【ninja】Ninja安装和基本使用
  • Gn 与 Ninja学习和使用
  • EOFError: Ran out of input
  • 解决tuple index out of range
  • list index out of range错误
  • list index out of range
  • python报错Ran out of input
  • 出现 CUDA out of memory 的解决方法
  • 内存溢出(out of memory)是内存不足吗?Outofmemory error怎么解决?
  • Packets out of order
  • PIL IndexError: index out of range
  • python Ran out of input 异常解决
  • xxx is out of date错误
  • IDEA SVN 提交时提示failed: is out of date
  • IndexError: list index out of range 错误原理及解决方法(python)

编译工具 Ninja 介绍相关推荐

  1. 关于项目编译工具ninja、make、cmake的区别与优劣

    ninja和make都是通过脚本语言指定编译规则,然后调用gcc等编译器实现自动化编译,过程中会通过文件时间戳来进行增量构建. ninja Ninja 是Google的一名程序员推出的注重速度的构建工 ...

  2. ILSpy反编译工具的介绍

    用途 ILspy是一个开源的.net反编译软件,使用十分方便. 开发原因 之所以开发ILspy是因为Red Gate宣布免费版的.NET Reflector(同样是反编译软件)将会在2011年2月停止 ...

  3. Java反编译工具Luyten介绍

    比较精准的一个java反编译工具,笔者有时候用jd-gui反编译不出来的class用luyten都可以反编译出来. 官方网站:https://github.com/deathmarine/Luyten ...

  4. 考拉 css,LESS/Sass 编译工具Koala介绍

    越来越多的同学开始使用 less 等预处理器的方式来编写 CSS 跟 JavaScript ,比较流行的有 less . sass . coffeescript . Less 等代码无法直接在浏览器中 ...

  5. 微信开发者工具 / 反编译工具CrackMinApp 下载安装

    微信开发者工具 / 反编译工具CrackMinApp 下载安装 文章目录 微信开发者工具 / 反编译工具CrackMinApp 下载安装 前言 一.微信开发者工具下载安装 二.反编译工具CrackMi ...

  6. 一些Java反编译工具/源代码查看工具的介绍

    2019独角兽企业重金招聘Python工程师标准>>> 有的朋友抱怨他们在使用他们公司的闭源框架时看不到底层的源代码.那么可以尝试使用一些Java反编译工具. 下面我举个例子介绍具体 ...

  7. Android apk反编译工具介绍

    首先apk不能被代码混淆(或未经编译优化),如果混淆了,反编译出来的代号还是看不懂, 当然,在你没反编译出来之前,你也不知道有没有混淆. 网上各种反编译工具,眼花缭乱,本文是个人对这些工作做的一个简单 ...

  8. Android Spider JDAX-GUI 反编译工具下载使用以及相关技术介绍

    文章目录 前言 一.JDAX下载 二.基本使用 2.1 解压zip 2.2 Java环境 2.3 进入Dos命令窗口启动Jdax-Gui 2.4 正常使用 三.常见的反编译工具以及简单分析介绍 1.A ...

  9. 介绍一款特别好用的java反编译工具jd-gui

    目录 写在前面 开始 写在前面 之前用过另一款java反编译工具jad 但是这个工具有个问题就是对于一些java8的新特性,比如lambda表达式是解析不出来的,更不用说java9和java17了.关 ...

最新文章

  1. wince下实现GPRS上网,程序控制拨号 .
  2. 【ARM】Programmers Model
  3. Ruby离线安装gem依赖
  4. 值得电商美工借鉴的购物APP页面设计,让人无法自拔
  5. GBDT原理及利用GBDT构造新的特征-Python实现
  6. “AI+遥感”产品研究现状
  7. Google - 搜索图片快速设置
  8. 一个菜鸟关于winrar密码无法秒破的研究结果
  9. WOW.js插件使用
  10. 懂车帝新能源汽车销量分析
  11. python输出好看的表格
  12. python发送邮件时报: Error: need RCPT command
  13. 【PC工具】可能是最好用最方便的内部网络设备查看工具,内网ip查询ip扫描工具...
  14. jsp与servlet的关系
  15. Intellij Idea:禁忌,请勿手残
  16. 突发!美国贸易管制黑名单新增8家:商汤、旷视、海康威视等在列
  17. VTK重建CT图像,写入和读取STL格式文件
  18. 零基础学C++——黑马程序员课程笔记(C++基础语法入门篇)
  19. android java 最新判断手机号码 包含虚拟号
  20. python实现回合制对战小游戏

热门文章

  1. Java------IO流之文件专属流
  2. c语言编程求pai的近似值,c语言:求π的近似值
  3. UOS 录制电脑播放的音频 / 内录音频
  4. python中var_【Python金融量化】VaR系列(一):HS,WHS,RM方法估计VaR
  5. 高效并发:Synchornized的锁优化详解
  6. css特效(使用伪元素生成随机颜色爱心)
  7. 多玩我的世界盒子手机版怎么联机?我的世界盒子电脑版怎么联机?
  8. 怎么把ogg音乐格式转换成mp3
  9. (Linux)进程间通信
  10. C# DGV常用操作