1、.gn是源文件;.gni是头文件,类似C++中的头文件.h 通过import进行引用
import("//build/config/c++/c++.gni")
2、gn有许多内置变量和内置方法可以直接调用
内置函数:
print/assert
内置变量:
sources
3、目标项 | Targets
目标是构建图中的一个节点。它通常表示将生成某种可执行文件或库文件。整个构建是由一个个的目标组成.以下是内置目标

action:运行一个脚本产生一个文件
bundle_data:产生iOS数据
executable:生成可执行文件
group:包含一个或多个目标的虚节点
shared_library:一个.dll或.so
source_set:一个轻量的虚拟静态库——指向真实库
static_library:一个.lib文件或者.a
component:基于构造类型
test:用于测试
app:可执行程序
android_apk:生成一个APK

4、配置项 | Configs
记录完成目标项所需的配置信息,例如:
config(“myconfig”) {#创建一个标签为myconfig的配置项
include_dirs = [ “include/common” ]
defines = [ “ENABLE_DOOM_MELON” ]
}
executable(“mything”) {#生成可执行文件
configs = [ “:myconfig” ]#使用标签为myconfig的配置项来生成目标文件
}

5、变量类型有以下几种:
bool
int
string :使用双引号和反斜线使用作为转义字符
list:我们无法获取list的航都,列表支持类似的附加

例子:a = "mypath"b = "$a/foo.cc"  # b -> "mypath/foo.cc"c = "foo${a}bar.cc"  # c -> "foomypathbar.cc"a = [ "first" ]a += [ "second" ]  # [ "first", "second" ]a += [ "third", "fourth" ]  # [ "first", "second", "third", "fourth" ]b = a + [ "fifth" ]  # [ "first", "second", "third", "fourth", "fifth" ]

6、条件语句(和C语言类似)
if(is_Linux || target_cpu == “x86”){
sources -= [“lite.c”]
}else if(……){
……
}
7、循环语句
foreach(i, list){
print(i)
}
8、自定义模版
gn提供了很多内置函数,使用偏傻瓜式,若构建不复杂的系统,熟悉这些内置函数,选择填空就可以交作业了,如果想高阶点,想自己定义函数怎么办? 答案是模板,模板就是自定义函数.
定义模板, 文件路径: //tools/idl_compiler.gni, 后缀.gni 代表这是一个 gn import file
template(“idl”) { #自定义一个名称为 “idl"的函数
source_set(target_name) { #调用内置函数 source_set
sources = invoker.sources #invoker为内置变量,含义为调用者内容 即:[ “a”, “b” ]的内容
}
}
#如何使用模板, 用import,类似 C语言的 #include
import(”//tools/idl_compiler.gni")
idl(“my_interfaces”) { #等同于调用 idl
sources = [ “a”, “b” ] #给idl传参, 参数的接收方是 invoker.sources
}

引用链接:
https://www.bbsmax.com/A/A7zgy8rV54/
https://blog.csdn.net/Enternalwiser/article/details/120548982

GN及Ninja基本语法相关推荐

  1. Gn 与 Ninja学习和使用

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

  2. gn、ninja的安装-Ubuntu18.04

    版权声明:原创文章,欢迎转载,但请注明出处,谢谢.https://blog.csdn.net/qiuguolu1108/article/details/103842556 如果你不想编译gn.ninj ...

  3. GYP,GN和Ninja

    chromium的编译过程中用到了GYP,GN和Ninja这三个构建工具,GYP是一个在不同平台构建项目的工具,GN是GYP的升级版,Ninja是一个小型追求速度的构建系统. GYP GYP是Gene ...

  4. WebRTC编译系统之GYP,gn和ninja

    GN(Generate Ninja)来生成构建脚本,使用 ninja 来构建. gn 的介绍在这里:https://www.chromium.org/developers/gn-build-confi ...

  5. Fuchsia之GN与Ninja构建hello world

    接上篇:Fuchsia中GN与Ninja构建过程  1.环境搭建 # cp -rf out/ ~/home/GN //将编译出来的out目录的gn都拷贝出来 # emacs /etc/profile ...

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

    Ninja构建系统入门--GN与Ninja构建过程 开始 GN构建系统 搭建 结束 开始 GN构建系统 GN是一种元构建系统,生成Ninja构建文件(Ninja build files),相较GYP而 ...

  7. ninja文件语法学习

    ninja文件语法学习 ninja本质上是配置文件,没有分支,循环的流程控制. 语法 基本概念 edge(边):build语句,可以指定目标(target)输出(output).规则(rule)与输入 ...

  8. WebRTC之gn与ninja(十三)

    Gn设计理念 编写构建文件不应该是一个创造性的努力.理想情况下,两个人应该产生相同的构建文件来实现相同的需求.除非绝对需要,否则不应有任何灵活性.做越多的事情越可能产生致命的错误. 定义应该比代码更像 ...

  9. Fuchsia中GN与Ninja构建demo

    # sudo apt-get install clang ninja-build re2c cmake graphviz gtest # git clone https://github.com/Me ...

最新文章

  1. 9.可变参数创建不可变集合
  2. 哪些情况是友情链接作弊?总结了11种方法!
  3. python 词云手把手_手把手教你生成炫酷的词云
  4. SVN Switch
  5. android 消除标题,Android Activity 去掉标题栏及全屏显示
  6. 在JavaScript中以日期/月/年格式获取当前日期
  7. python memoryview_memoryview的用法
  8. 蛋制品加工行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  9. YII框架截取字符串长度
  10. 草根力量:同学聚会(嘉定二中校庆60周年)
  11. 小白学 Python 爬虫(18):Requests 进阶操作
  12. 李宏毅机器学习-- RNN
  13. 基于Servlet的学生管理系统
  14. 5种Python深度学习库和资料
  15. 小武与tfpyth的碰撞----torch.autograd.Function进阶版本
  16. git报错:error: failed to push some refs to ... 的解决办法及如何让线上覆盖本地方法【Git/SVN】
  17. 微信小程序扫描二维码条形码 (wx.scanCode)
  18. 百度上传控件webUPload 的使用
  19. 安全背后: 浏览器是如何校验证书的
  20. 《无间道》中的“盲签字”

热门文章

  1. weblogic动态调试环境搭建
  2. Previous writer likely failed to write hdfs://hadoop001:8020/tmp/hive/root/_tez...... Failing becaus
  3. java生成英雄与怪物对象,java 创建一个LOL中的英雄类和怪物类 初学者,求大神指点...
  4. STC系列51单片机在Windows下的开发
  5. OpenWRT安装及配置
  6. W10打开bat文件一闪就没了
  7. luogu P3398 仓鼠找sugar
  8. 靶机渗透日记 controller
  9. html5 video 隐藏全屏按钮,如何隐藏HTML5视频标签的全屏按钮?
  10. Linux 中计划任务把结果发送到你的邮箱