GN及Ninja基本语法
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基本语法相关推荐
- Gn 与 Ninja学习和使用
最近开始研究OpenHarmony,发现大多数鸿蒙系统的组件的编译构建都是用 gn 和 ninjia 完成的.之前在编译Google开源的代码时有过接触,但是没有对其进行深入学习使用,只知道它是谷歌弄 ...
- gn、ninja的安装-Ubuntu18.04
版权声明:原创文章,欢迎转载,但请注明出处,谢谢.https://blog.csdn.net/qiuguolu1108/article/details/103842556 如果你不想编译gn.ninj ...
- GYP,GN和Ninja
chromium的编译过程中用到了GYP,GN和Ninja这三个构建工具,GYP是一个在不同平台构建项目的工具,GN是GYP的升级版,Ninja是一个小型追求速度的构建系统. GYP GYP是Gene ...
- WebRTC编译系统之GYP,gn和ninja
GN(Generate Ninja)来生成构建脚本,使用 ninja 来构建. gn 的介绍在这里:https://www.chromium.org/developers/gn-build-confi ...
- Fuchsia之GN与Ninja构建hello world
接上篇:Fuchsia中GN与Ninja构建过程 1.环境搭建 # cp -rf out/ ~/home/GN //将编译出来的out目录的gn都拷贝出来 # emacs /etc/profile ...
- Ninja构建系统入门--GN与Ninja构建过程
Ninja构建系统入门--GN与Ninja构建过程 开始 GN构建系统 搭建 结束 开始 GN构建系统 GN是一种元构建系统,生成Ninja构建文件(Ninja build files),相较GYP而 ...
- ninja文件语法学习
ninja文件语法学习 ninja本质上是配置文件,没有分支,循环的流程控制. 语法 基本概念 edge(边):build语句,可以指定目标(target)输出(output).规则(rule)与输入 ...
- WebRTC之gn与ninja(十三)
Gn设计理念 编写构建文件不应该是一个创造性的努力.理想情况下,两个人应该产生相同的构建文件来实现相同的需求.除非绝对需要,否则不应有任何灵活性.做越多的事情越可能产生致命的错误. 定义应该比代码更像 ...
- Fuchsia中GN与Ninja构建demo
# sudo apt-get install clang ninja-build re2c cmake graphviz gtest # git clone https://github.com/Me ...
最新文章
- 9.可变参数创建不可变集合
- 哪些情况是友情链接作弊?总结了11种方法!
- python 词云手把手_手把手教你生成炫酷的词云
- SVN Switch
- android 消除标题,Android Activity 去掉标题栏及全屏显示
- 在JavaScript中以日期/月/年格式获取当前日期
- python memoryview_memoryview的用法
- 蛋制品加工行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- YII框架截取字符串长度
- 草根力量:同学聚会(嘉定二中校庆60周年)
- 小白学 Python 爬虫(18):Requests 进阶操作
- 李宏毅机器学习-- RNN
- 基于Servlet的学生管理系统
- 5种Python深度学习库和资料
- 小武与tfpyth的碰撞----torch.autograd.Function进阶版本
- git报错:error: failed to push some refs to ... 的解决办法及如何让线上覆盖本地方法【Git/SVN】
- 微信小程序扫描二维码条形码 (wx.scanCode)
- 百度上传控件webUPload 的使用
- 安全背后: 浏览器是如何校验证书的
- 《无间道》中的“盲签字”
热门文章
- weblogic动态调试环境搭建
- Previous writer likely failed to write hdfs://hadoop001:8020/tmp/hive/root/_tez...... Failing becaus
- java生成英雄与怪物对象,java 创建一个LOL中的英雄类和怪物类 初学者,求大神指点...
- STC系列51单片机在Windows下的开发
- OpenWRT安装及配置
- W10打开bat文件一闪就没了
- luogu P3398 仓鼠找sugar
- 靶机渗透日记 controller
- html5 video 隐藏全屏按钮,如何隐藏HTML5视频标签的全屏按钮?
- Linux 中计划任务把结果发送到你的邮箱