• 尝试新的构造系统 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
  • 相关阅读:
    RHEL5.8使用yum安装xclock
    Linux下磁盘分区、挂载、卸载操作记录
    CentOS6.5磁盘分区和挂载操作记录
    CentOS环境下下调整home和根分区大小
    PowerDesigner连接Oracle数据库(32位)反向生成物理数据模型
    Create-React-App脚手架使用方法
    react 简书开发笔记
    本地连接服务器的mongodb
    使用mongoose连接mongodb(转载文章)
    将koa+vue部署到服务器
  • 原文地址:https://www.cnblogs.com/pied/p/9597593.html
Copyright © 2020-2023  润新知