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

你可能感兴趣的:(鸿蒙,harmonyos)