• 尝试新的构造系统 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>
    int 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:Toolsmingwingcc
    source_path=..2_SW1_Sources
    opts=-MMD -MF
    CC_FLAGS = -I$source_path2_MCAL -I$source_path3_MCAL_generated -I$source_path4_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_path2_MCALAdc.c
    build build/obj/Base.c.d: dep_gen $source_path2_MCALBase.c
  • 相关阅读:
    浏览器输入一个url到整个页面显示出来经历了哪些过程?
    ajax
    为什么JS是单线程?JS中的Event Loop(事件循环)?JS如何实现异步?setimeout?
    jQuery中ready方法的实现
    this+call、apply、bind的区别与使用
    内存泄漏、垃圾回收机制、哪些情况会导致内存泄漏
    浏览器同源策略和跨域方法
    node.js
    JS原型、原型链、构造函数、实例与继承
    JS常用操作节点的方法
  • 原文地址:https://www.cnblogs.com/pied/p/9597593.html
Copyright © 2020-2023  润新知