Ninja构建系统入门--GN与Ninja构建过程

  • 开始
    • GN构建系统
    • 搭建
  • 结束

开始

GN构建系统

GN是一种元构建系统,生成Ninja构建文件(Ninja build files),相较GYP而言,具有如下优点:

  • 可读性更好,更容易编写和维护。
  • 速度更快,谷歌官方给的数据是20倍的速度提升。
  • 修改GN文件后,执行ninja构建时会自动更新Ninja构建文件。
  • 更简单的模块依赖,提供了public_deps, data_deps等,在GYP中,只有一种目标依赖,导致依赖关系错综复杂,容易引入不必要的模块依赖。
  • 提供了更好的工具查询模块依赖图谱。这在GYP构建系统中是一个噩梦,要查一个目标依赖哪些模块或者一个模块被哪些目标依赖几乎是不可能的。
  • 更好的调试支持。在GN中,只需要一条print语句就可以解决。

搭建

sudo apt-get install clang ninja-build re2c cmake
git clone git@github.com:MeekJeen/GN.git
cd GN
python3 build/gen.py //本目录下生成out目录
ninja -C out //生成gn
cd examples/simple_build
../../out/gn gen out/default //编译生成.ninja文件
../../out/gn args --list out/default //显示参数
ninja -C out/default -v //ninja使用.ninja脚本编译生成可执行程序
cd out/default
./hello
Hello, world




结束

Ninja构建系统入门--GN与Ninja构建过程相关推荐

  1. Ninja 构建系统

    Ninja 构建系统 概述 Ninja([ˈnɪndʒə]忍者)是一个构建系统,与 Make 类似.作为输入,你需要描述将源文件处理为目标文件这一过程所需的命令. Ninja 使用这些命令保持目标处于 ...

  2. Ninja构建系统初探

    Ninja构建系统概述 Ninja是一个专注于速度的小型构建系统.它与其他构建系统在两个主要方面有所不同:一是它被设计为由更高级别的构建系统生成.ninja文件作为其输入:二是它被设计为尽可能快地执行 ...

  3. chromium中的GN构建系统

    阅读最新的chromium源码,发现项目的构建系统已经从GYP全面切换到GN了.在软件开发中,经常有人忠告:不要重复造轮子.但谷歌可不管这个,造的轮子一个接一个,谁叫人家牛呢?chromiumi项目为 ...

  4. chrome ninja 文件_ninja和gn

    引言 官方文档: What is GN? GN快速入门指南 ninja 教程 1 构建系统简介 在探讨chromium的最新GN构建系统之前,回顾一下软件开发中的构建系统.构建系统的需求是随着软件规模 ...

  5. Gn 与 Ninja学习和使用

    最近开始研究OpenHarmony,发现大多数鸿蒙系统的组件的编译构建都是用 gn 和 ninjia 完成的.之前在编译Google开源的代码时有过接触,但是没有对其进行深入学习使用,只知道它是谷歌弄 ...

  6. OpenHarmony编译构建系统详解,从零搭建windows下开发环境,巨方便!

    自从OpenHarmony更新了dev-tool,就可以在windows下构建鸿蒙(轻量型)系统了,这对于进行MCU开发的朋友们,学习鸿蒙OS会友好许多!我们可以更快的构建出系统,方便快速学习和验证. ...

  7. Spring Boot(7)---构建系统和依赖管理

    Spring Boot的使用:构建系统和依赖管理 13. 构建系统 强烈建议你选择一个支持依赖管理,能消费发布到"Maven中央仓库"的artifacts的构建系统,比如Maven ...

  8. Bazel构建系统的使用以及go项目实践案例

    文章目录 一.基本概念 1. `Bazel`是做什么的?使用场景 2. 什么是构建系统?种类有哪些 2.1 构建系统作用? 2.2 构建系统的目标? 2.3 为什么选择构建系统?为什么不直接使用编辑器 ...

  9. ROS2学习(十六).ROS概念 - 构建系统

    关于ROS 2的构建系统 `ament_package`包 **package.xml** **ament package** `ament_cmake`代码库 `ament_lint`代码库 构建工 ...

最新文章

  1. [转]脏读,不可重复读,幻读的理解
  2. 约瑟夫环递推公式的由来(约瑟夫环公式法)
  3. LinkedList类源码浅析(二)
  4. python中的字典和集合_Python 字典和集合
  5. matlab机器人画圆轨迹规划
  6. 单片机C语言程序设计心得,单片机心得体会4篇
  7. 微信头像制作小程序源码
  8. 设备管理 设备控制方式
  9. 总结 : 安卓开发大作业废话集合
  10. C++初阶习题(牛客)【4】Fibonacci数列
  11. 怎么用dw修改PHP网页模板,【网站模板如何使用】从网站下载的网页模板在dwcs6中如何修改使用?什么是网页设计模板,如何利用网页设计模板?...
  12. 跨境电商平台哪个好?——扬帆际海
  13. mysql刷新当前数据库_sqlyog刷新数据库
  14. opencv处理图像数据时候,出现图像全黑
  15. C语言编程-----求s=a+aa+aaa+aaaa+aa...a的值
  16. Java 百度地图 根据经纬度(坐标) 获取乡镇
  17. 事实胜于雄辩,激素性皮炎的治疗激素皮炎的治疗面部激素性皮炎在康本
  18. 3个python库的图像增强
  19. 文件服务器锁定账户,文件服务器账户权限设置
  20. Docker 中 安装Linux镜像

热门文章

  1. 阿里实现Redis亿级存储的方案
  2. 用Go建千亿级微服务 分析详细,适合新手理解概念
  3. 三分钟了解坚果J10的不足,多方位分析,让你学会挑选投影仪
  4. (转)2018最新Web前端经典面试试题及答案
  5. CAD转PDF其实很简单,掌握这4种方法就可以
  6. Base64在线加密解密
  7. 计算机基础2,计算机基础总结2
  8. 谷歌(Google): reCaptcha(2.0版本)做网站验证码
  9. 用python成为顶级黑客-python绝技:运用python成为顶级黑客 PDF 超清中文版
  10. 【微信公众号开发】四、公众号按钮设置及自己的微信按钮编辑器