首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

GN语言和操作

if/ else/ foreach语句,即使他们使用{ },不会引入新范围,所以更改将持续在语句之外。 gn 命名事物 文件和目录名称:文件和目录名称是字符串,并被解释相对于当前构建文件目录。...内置目标类型(请参阅gn help以获取更多帮助)是: 类型说明action运行一个脚本来生成一个文件action_foreach每个源文件运行一次脚本bundle_data声明数据加入到Mac /...公共配置 目标可以将设置应用于依赖它其他目标。最常见例子是一个第三方目标,它需要一些定义或包含目录头才能正确编译。您希望这些设置既适用于第三方库本身编译,也适用于使用该库所有目标。...在Chrome,更喜欢build/buildflag_header.gni用于定义构建标题头文件系统,以防止大多数编译器定义错误。 4. 模板 模板是GN重用代码主要方式。...GN工具链工作方式是试图以一种简洁方式将这个概念分离到构建文件结果。 GN保留了一些GYP概念,比如“全部依赖”设置,这些设置在Blaze中有些不同。

1.5K10

AIoT应用创新大赛--我项目我做主,使用GN+Ninja来完成构建系统(VSCode开发)

背景 自从21年接触了OpenHarmony后,就对GN+Ninja构建系统特别感兴趣,然后自己尝试着做了一个简化版构建系统。...而本次比赛,如果不考虑使用官方IDE的话,又不想用makefile(主要是不会写),所以还是尝试着用GN+Ninja完成了rt1062构建系统。...2、编译构建命令: ninja -C out/${BOARD} 3、建议使用方式: 我比较懒,喜欢直接在~/.bashrc配置好BOARD环境变量,并设置命令别名: alias gbuild='gn...我们先说一下添加c源文件,可以在组件目录添加c源文件,只需要在组件BUILD.gn配置文件修改sources字段内容即可。...1、改文件仅在组件内使用,此时不需要定义头文件目录(按相对路径引用即可);2、若该头文件组件对外接口定义文件,则需要在前面提到build/config/compiler/BUILD.gn文件 修改

1.5K10
您找到你想要的搜索结果了吗?
是的
没有找到

GN学习记录

近期准备学习WebRTC源码,发现WebRTC构建使用GN,花了些时间进行学习,这里做下笔记。...内元素也是从0开始,可以使用括号取内容 a = [ "first", "second", "third" ] b = a[1] # -> "second" 其中,括号取内容是一个只读操作,这里主要使用场景是从外部脚本返回列表读取内容...认为通常我们构建时应该不需要做循环操作,如果确实需要可以确认下构建是否能够优化 函数调用 除了使用模板之外,通常用户无法自定义函数,gn只能够调用函数,例如 print("hello, world"...,这些源文件不会构建出中间 group: 一组被命名构建目标 copy action, action _foreach: 执行脚本 bundle_data, create_bundle: Mac &...团队开发时如何隔离代码 1.使用deps和public_deps来区分哪些依赖是需要公布出去,哪些是私有的 2.使用visibility限制哪些目标能够依赖我们编写目标 3.使用testonly限制哪些目标不能够链接到发布代码

3K41

Linux不同共享库同名函数处理

场景引入: 在一个尚未成熟行业,一般行业标准是先于国家标准。这就导致了开发人员需要做很多兼容工作,再就是会用到很多其他厂商提供库与头文件,面对不同版本标准,一般会更新库与头文件。...(别人库无法更改函数名、C++可以使用命名空间) 方法是肯定有的,这次先测试①和②效果。 一、创建两个具有同名函数共享库 1. 文件目录结构 ?...libOne.c是源文件、libOne.c是源文件对应头文件、libOneTest.h是对外暴露接口头文件。还有一个Makefile文件。 2..../lib -lone -ltwo all: $(CC) $(CFLAG) $(INCLUDE) $(SRC) $(LIB) -o $(TARGET) 3. main.c源文件 #include <...程序执行效果 ①链接库顺序LIB=-L../lib -lone -ltwo ? ②链接库顺序LIB=-L../lib -ltwo -lone ?

2.9K10

鸿蒙系统研究之三:迈出平台移植第一步

在本文你将了解到: 如何为 OpenHarmony OS 2.0 标准系统增加新产品定义; 如何将平台移植加入构建系统模拟器编译出 Linux 内核; 常用模拟器软件有 QEMU,能够模拟多种硬件型号... Vexpress A9 编译内核 关于嵌入式 Linux 内核编译,网上资料很多,这里探讨是如何在鸿蒙系统构建系统中加入内核编译步骤。...其中 BUILD.gn 鸿蒙构建系统规则定义文件: import("//build/ohos.gni") kernel_build_script_dir = "//device/qemu/vexpress-a9...让我们来使用构建脚本编译系统: ....小结 鸿蒙系统构建系统还是比较复杂,交织着 bash 脚本、python 脚本、GN 构建系统、make 构建系统、JSON 文件等等,有些文件还是编译过程生成出来,理解起来相当困难。

1.8K50

Linux基础(串口编程)

上面的代码是使用串口第一步,来解释下都是啥意思。...来瞧瞧: 第21-22行,定义了一个用来配置串口属性结构体: struct termios serial; bzero(&serial, sizeof(serial)); 第24行,将串口设置raw...数据模式,即关闭掉字符回显、关闭输入输出时特殊进度控制特殊字符,因为我们此时不需要使用串口来实现终端控制,因此这些功能都不需要: cfmakeraw(&serial); 第25-26行,很简单,设置输入输出波特率.../ 设置字符尺寸CS8 serial.c_cflag &= ~PARENB; // 关闭奇偶校验 serial.c_cflag &= ~CSTOPB; // 关闭停止位 第33、36行,刷新掉接收到数据并忽略掉他们...最后,将以上所有参数一股脑设置到对应串口就行了: tcsetattr(fd,TCSANOW,&serial); 当然,上面的 fd 就是系统某一个你想要设置成上面那样属性参数串口,比如就拿粤嵌

12.7K20

鸿蒙系统研究之二:内核编译

一个操作系统,最重要部分无疑是内核。鸿蒙系统声称自研了内核,从之前开源 OpenHarmony OS 代码可以看到,是一款名为 LiteOS 面向 IoT 领域构建轻量级物联网操作系统。...调用 gn 生成 Ninja 编译脚本;2. 调用 ninja 构建系统。 在之前文章 聊一聊鸿蒙构建系统 ,我们知道鸿蒙采用了 GN 构建系统。...GN 构建系统规则文件名通常 BUILD.gn 和 *.gni 文件,通过依赖、包含等方式,将整个系统规则文件组织成一个整体。...,通过之前脚本处理,最后确定构建目标是 packages ,该构建目标又依赖于 //build/ohos/packages:make_packages,对应 GN 规则文件 build/ohos/...kernel_module_build.sh 华为把构建过程整无比复杂,又是脚本,又是 python,然后掺杂着 JSON 文件,最后是 GN 构建系统GN 构建系统又掺杂着脚本,看起来头大。

2.1K30

Android.mk语法解析

LOCAL_PATH LOCAL_PATH := $(call my-dir) android.mk文件必须以本地路径变量定义开始。 它用于在开发树定位源文件。...在本例,由构建系统提供宏函数'my dir'用于返回当前目录路径(即包含android.mk文件本身目录)。...LOCAL_SRC_FILES LOCAL_SRC_FILES := hello-jni.c LOCAL_SRC_FILES变量必须包含C和/或C++源文件列表,这些文件将被构建并组装到模块。...注意你应该这里不列出头文件和包含文件,因为构建系统将自动您计算依赖项;只列出源文件这将直接传递给编译器。 注意,C++源文件默认扩展名是“.CPP”。...$(clear_vars)”以来,您在本地变量定义信息,并确定要构建什么以及如何构建

1.7K00

CMake 秘籍(八)

我们目标将是逐步展示如何将一个非平凡项目移植到 CMake,并讨论这样过程步骤。...(VERSION 3.5 FATAL_ERROR) project(vim LANGUAGES C) 在添加任何目标源文件之前,我们可以设置默认构建类型。...记录传统构建过程记录 在我们向配置添加任何目标之前,通常首先记录传统构建过程内容,并将配置和构建步骤输出保存到日志文件,这通常很有用。对于我们 Vim 示例,可以使用以下方法完成: $ ....编译器标志范围 在这个特定示例项目中,所有源文件使用相同编译标志。对于其他项目,我们可能更倾向于不全局定义编译标志,而是使用target_compile_options每个目标单独定义标志。...这样做好处是更灵活和更局部范围。在我们这里例子,代价可能是不必要代码重复。 移植测试 现在让我们讨论如何将测试从参考构建移植到我们 CMake 构建

12010

Android NDK编程(二)---CMakeList.txt详解

Cmake 并不直接建构出最终软件,而是产生其他工具脚本(如Makefile ),然后再依这个工具构建方式使用。...Android Studio利用 CMake生成是ninja,ninja是一个小型关注速度构建系统。我们不需要关心ninja脚本,知道怎么配置cmake就可以了。...so add_library(变量名A SHARED B.c) add_library(变量名A STATIC B.c) # 源文件 最终生成 so 多文件设置 file(GLOB 变量名SRCC...( imported-lib/include/ ) # 设置依赖库 # 如果是静态库,需要根据 add_library设置变量名B去查找 # 如果是动态库,需要根据 CMAKE_CXX_FLAGS...改变后路径下去按照库名查找 target_link_libraries( 要生成库A 依赖库B ${log-lib} ) 我们默认生成CMakeList.txt下面代码 # For more

3.1K32

嵌入式Linux串口编程

简介 嵌入式Linux下串口编程与Linux系统编程没有什么区别,系统API都是一样。...嵌入式设备串口编程是很常用,比如会对接一些传感器模块,这些模块大多是RS232或者RS485接口,对于软件层面上来说,RS232与RS48区别不大。...RS232与RS485在使用区别,RS232是全双工,只能对接一个设备串口设备。RS485是半双工总线协议,一般可以挂多个传感器设备,半双工意思是同时只能有一个设备向串口发数据。...将终端设置原始模式,该模式下所有的输入数据以字节单位被处理 tcflush 用于清空输入、输出缓冲区 tcsetattr 设置串口终端参数 read 读取数据 write 写数据 close 关闭串口设备...; //用数据位掩码清空数据位设置 /*set baud_rate*/ for(i = sizeof(speed_arry) / sizeof(speed_arry[0]);

13K20

【驱动】串口驱动分析(四)-串口编程和调试方法

设置行约束规则为N min N 和 -icanon 配合使用设置每次一完整读入最小字符数 ospeed N 设置输出速度N 波特 rows...一些系统使用 c_cflag CBAUD 选择位,其他系统使用单独变量,例如 sg_ispeed 和 sg_ospeed 。) CSIZE   字符长度掩码。...字符,使终端设备向系统传输数据 串口属性设置示例 设置串口属性主要是配置termios结构体各个变量,大致流程如下: 使用函数tcgetattr保存原串口属性 struct termios newtio...newtio.c_cflag &= ~CSIZE; newtio.c_cflag |= CS8; 设置奇偶效验位需要用到两个termios成员:c_cflag和c_iflag。...首先要激活c_cflag校验位使能标志PARENB和是否进行奇偶效验,同时还要激活c_iflag奇偶效验使能。

18510

鸿蒙源码构建工具Gn 与 Ninja 介绍及使用入门

之前搞嵌入式一直只听说和使用过makefile和make编译命令。 最近鸿蒙HarmonyOS系统火爆,对其源码编译构建产生了兴趣,了解到鸿蒙系统编译构建是基于 Gn 和 Ninja 完成。...官方介绍:https://ninja-build.org/ 类似同类型构建老大哥老古董make ,make 即 GNU Make,一个用于决定如何使用命令完成最终目标构建程序。...make 有3 个特性: make 只是一个通用程序,它不知道如何具体完成目标构建工作。 make 需要 makefile 描述来决定目标构建具体方案。...Ninja 可以看作是一个更好更快 make 。 什么是GNGN是一个生成Ninja构建文件构建系统,以便你可以用Ninja构建项目。...gin和ninja二进制可执行文件,上述链接中有说明。 简单使用入门: 以helloworld例,建一个gn-test文件夹: 几个文件必不可少,这个需要手工去提前按照格式创建好。

1.5K30

linux uart应用开发(ttyS*设备)《Rice linux 学习开发》

INLCR:将输入 NL 翻译为CR。 IGNCR:忽略输入回车。 ICRNL:将输入回车翻译为新行 (除非设置了 IGNCR)。...OLCUC:(不属于 POSIX) 将输出小写字母映射大写字母。 ONLCR:(XSI) 将输出新行符映射回车-换行。...OCRNL:将输出回车映射新行符 ONOCR:不在第 0 列输出回车。 ONLRET:不输出回车。 OFILL:发送填充字符作为延时,而不是使用定时来延时。...一些系统使用 c_cflag CBAUD 选择位,其他系统使用单独变量,例如 sg_ispeed 和 sg_ospeed 。) CSIZE:字符长度掩码。...当设置 IEXTEN 和 ISIG,并且系统支持作业管理时可被识别,不再作为输入传递。 VLNEXT:(not in POSIX; 026, SYN,Ctrl-V) 字面上下一个。

3.3K10

Android 10 构建系统实战问题解决

虽然编译过程中使用 Chromium 构建系统 GN,但编译过程中会链接到 Android 系统特有的 so。这也好理解,毕竟我们是基于 Android 深度定制,加入了一些自己特有的东西。...其实在 chromium 上也进行过类似的折腾,先是 GYP -> Ninja,后来是 GN -> Ninja,Chromium 最终也是使用 Ninja 构建代码。...也就是 .PHONY 构建目标无法增量编译,会影响编译速度。但在实际,这个没法避免。从上面的结构可以看到,其缺省行为是 false,所以现在问题就是如何将缺省行为改为 true。...就拿构建系统来说,有 Make、Cmake、GYP、GN、Soong、Ninja、Bazel 等等,以后也不知道会整出什么花样,但只要你熟悉一两个构建系统,其它也相差不太多。...在解决问题过程,中科院软件所汪辰写一系列文章对我帮助很大,加深了我对 Android 构建系统理解。

1.3K40
领券