Ninja基本

一、简介:

        Ninja是一名Google的一名程序员推出的注重速度的构建工具。一般在Unix/Linux上程序通过make/makefile来构建编译,大大而ninja通过将编译任务并行组织,提高了构建速度。

        PS:1、编译(Compile),指源代码文件通过编译器转化为目标文件的过程。编译输入文件是C/CPP/H等文本文件,输出的是OBJ目标文件。

                     PS:(1)obj(object)文件是3D模型文件格式,是程序编译后的二进制文件,在通过链接器和资源文件就成了exe文件;obj文件又称为目标文件或中间文件。

                             (2)文本文件是一种计算机文件,它是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。特别的是,文本文件是指以ASCII码方式(也称文本方式)存储文件,更准确地说,英文、数字等字符存储的是ASCII码,汉字存储的是机内码。换言之,文本文件除了存储文件有效字符信息(包括能用ASCII码字符表示的回车、换行等信息),无法存储其他任何信息。

                             (3)流式文件:所见即所得的编辑内容。eg:Word、TXT,代表流式软件有永中Office、微软Office、WPS等。

                             (4)资源文件(.rc文件是resource的简称),对应着VS中的资源视图文件;包括譬如对话框、菜单、图标、字符串、版本等资源信息。使用.rc资源文件的目的是为了对程序中用到的大量资源进行统一的管理。它的扩展名是.rc,在程序编译时它会被资源编译器编译生成一个.res的二进制文件。

                 2、链接(Link),指把多个OBJ目标文件、LIB库文件链接成一个可执行文件的过程。链接过程的输入是OBJ、LIB等库文件,输出是EXE、DLL等可执行文件。

                       PS:(1)静态链接lib库和lib导入库以及动态链接库dll的关系

                                               1)静态lib:包含了所有的代码实现的,是源代码文件.c或.cpp文件编译而成的,这个lib库就是文本形式的源代码编译之后的二进制形式代码

                                               2)lib导入库:只是dll文件中所有函数在dll文件中的地址说明

                                               3)静态lib与lib导入库最后的命运殊途同归,在程序生成之后,就被抛弃了。

                                               4)dll的使用还可以直接使用API函数来获取dll内部的函数地址,然后将函数类型转换为正确的函数类型,而这些函数类型的声明在提供的头文件中。头文件与我们自己写的头文件一样,这个过程非常麻烦,这就是lib导入库存在的空间。即dll的两种使用方式,①使用lib导入库,②使用API直接使用dll里面的函数

                3、构建(build),指生成整个操作系统的过程。构建涵盖了对源代码的编译、对库文件的链接,还有可能包含映像文件打包等其他附加操作。在三个概念中,构建的范围是最大的。

二、ninja本身

            ninja本身就是通过ninja编译出来的

        编译过程

                    1、生成一个build.ninja

                    2、执行python3 configure.py --bootstrap之后编译源码,生成一个a.out

                    3、根据这个build.ninja重新编译生成可执行文件ninja

                    4、在ninja根据ninja.build来编译时会自动创建一个build目录用于存放编译过程中的临时文件。

三、ninja启动过程

       1、处理参数

       2、读取ninja文件并构建图

       3、构建Edge图 

       4、加载日志文件

                    (1).ninja_log保存ninja运行期间的所有日志

                    (2).ninja_deps保存了ninja的构件图,在此过程将节点添加到构建图中,查找每个节点的最后记录记录输出,并计算开发记录的总数(使用ninja -t deps读取)

       5、执行编译       

四、总结

        1、由其他高级编译系统生成其输入文件

                (1)ninja自带ninja_syntax.py

                (2)安卓soong编译系统中的工具

                (3)cmake-Gninja生成ninja文件

        2、更快的编译

                (1)编译前会构建一张图

                (2)根据图找到依赖关系链

                (3)根据依赖关系链,展开编译命令,构建子进程进行编译以提高编译速度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值