GNU Make

浅析鸿蒙中的 Gn 与 Ninja(一)

最后都变了- 提交于 2021-01-28 11:59:59
目录: Ninja简介 make 的 3 个特性 举例说明Ninja 的用法 如何向构建工具 Ninja 描述构建图 后记 下载Ninja学习手册及源代码 鸿蒙系统的编译构建是基于 Gn 和 Ninja 完成的,那么 Gn 和 Ninjia 有什么关系呢?具体又是如何工作的呢?想必大多数热衷于应用开发的同学都还没有深究过,那么今天就借此机会带着大家扒一扒 Gn 和 Ninja。 我们先来说说 Ninja 吧! Ninja 是借由 Google Chrome 项目而诞生的一个构建工具,它的诞生目标是为了速度。换句话说,在 Google Chrome 项目的开发过程中,开发者们认为同类型的其它构建工具不给力,所以才会考虑重新开发更高效的工具。要说同类型,那么不得不提构建界的老大哥 make !make 即 GNU Make,一个用于决定如何使用命令完成最终目标构建的程序。 在这里强调 make 的 3 个特性: make 只是一个通用程序,它不知道如何具体的完成目标的构建工作 make 需要 makefile 中的描述来决定目标构建的具体方案 make 需要借助其它工具(如:gcc)才能执行方案,最终完成工作 这是不是跑题了!不是说好的讨论 Ninja 吗?怎么扯到 make 上去了?! 因为 Ninja 可以看作是一个更好的 make !而大多数同学都熟悉 make ,所以通过对比

【nmake】Nmake基本语法和Windows下的makefile.vc编写demo

大兔子大兔子 提交于 2020-08-14 17:39:14
DATE: 2018.12.21 1、参考: https://blog.csdn.net/bytxl/article/details/46315131 https://blog.csdn.net/mini92/article/details/77374577 https://www.cnblogs.com/kekec/archive/2013/04/21/3007277.html https://blog.csdn.net/SoaringLee_fighting/article/details/85158835 https://cognitivewaves.wordpress.com/makefiles-windows/ https://cognitivewaves.wordpress.com/makefiles/ 2、前言     前面讲述过Windows下gnu makefile的编写以及对应编译方法(参考: GnuWin32使用以及windows下gnu makefile编写 ),本文讲述的是Windows下符合Nmake编译规则的VC makefile.vc的编写方法,由于nmake和gmake两者存在不同,造成这两种makefile之间句法存在差异,主要是预处理宏、内置宏和变量使用方面的差异。 3、Nmake基本语法 3.1、Nmake简介     Nmake同GNU

【nmake】Nmake基本语法和Windows下的makefile.vc编写demo

会有一股神秘感。 提交于 2020-08-14 13:48:21
DATE: 2018.12.21 1、参考: https://blog.csdn.net/bytxl/article/details/46315131 https://blog.csdn.net/mini92/article/details/77374577 https://www.cnblogs.com/kekec/archive/2013/04/21/3007277.html https://blog.csdn.net/SoaringLee_fighting/article/details/85158835 https://cognitivewaves.wordpress.com/makefiles-windows/ https://cognitivewaves.wordpress.com/makefiles/ 2、前言     前面讲述过Windows下gnu makefile的编写以及对应编译方法(参考: GnuWin32使用以及windows下gnu makefile编写 ),本文讲述的是Windows下符合Nmake编译规则的VC makefile.vc的编写方法,由于nmake和gmake两者存在不同,造成这两种makefile之间句法存在差异,主要是预处理宏、内置宏和变量使用方面的差异。 3、Nmake基本语法 3.1、Nmake简介     Nmake同GNU

GNU Makefile变量赋值=,?=,:=和+ =有什么区别?

痴心易碎 提交于 2020-08-10 01:59:43
问题: Can anybody give a clear explanation of how variable assignment really works in Makefiles. 任何人都可以清楚地解释变量赋值在Makefiles中是如何工作的。 What is the difference between : 之间有什么区别: VARIABLE = value VARIABLE ?= value VARIABLE := value VARIABLE += value I have read the section in GNU Make's manual, but it still doesn't make sense to me. 我已经阅读了GNU Make手册中的 部分 ,但是对我来说仍然没有意义。 解决方案: 参考一: https://stackoom.com/question/1smU/GNU-Makefile变量赋值-和-有什么区别 参考二: https://oldbug.net/q/1smU/What-is-the-difference-between-the-GNU-Makefile-variable-assignments-and 来源: oschina 链接: https://my.oschina.net/u/3797416/blog/4332177

如何在makefile中写入“ cd”命令?

两盒软妹~` 提交于 2020-03-16 20:33:19
某厂面试归来,发现自己落伍了!>>> 例如,我的makefile文件中包含以下内容: all: cd some_directory 但是当我键入 make 我只看到'cd some_directory',就像在 echo 命令中一样。 #1楼 它实际上是在执行命令,将目录更改为 some_directory ,但是,这是在子进程shell中执行的,并且既不影响make也不影响您正在使用的shell。 如果要在 some_directory 执行更多任务,则需要添加分号并附加其他命令。 请注意,您不能使用换行符,因为它们被make解释为规则的结尾,因此,为清楚起见而使用的任何换行符都必须使用反斜杠进行转义。 例如: all: cd some_dir; echo "I'm in some_dir"; \ gcc -Wall -o myTest myTest.c 还请注意,即使您添加了反斜杠和换行符,每个命令之间也必须使用分号。 这是由于shell将整个字符串解析为一行的事实。 如注释中所述,您应使用'&&'联接命令,这意味着它们仅在前面的命令成功执行后才会执行。 all: cd some_dir && echo "I'm in some_dir" && \ gcc -Wall -o myTest myTest.c 这在进行破坏性工作(例如清理)时尤其重要,因为如果 cd

生成文件符号$ @和$ <是什么意思?

↘锁芯ラ 提交于 2020-02-26 04:58:45
CC=g++ CFLAGS=-c -Wall LDFLAGS= SOURCES=main.cpp hello.cpp factorial.cpp OBJECTS=$(SOURCES:.cpp=.o) EXECUTABLE=hello all: $(SOURCES) $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) -o $@ .cpp.o: $(CC) $(CFLAGS) $< -o $@ $@ 和 $< 到底做什么? #1楼 $@ 和 $< 称为 自动变量 。 变量 $@ 代表已创建文件的名称(即目标),而 $< 代表创建输出文件所需的第一个先决条件。 例如: hello.o: hello.c hello.h gcc -c $< -o $@ 在这里, hello.o 是输出文件。 这就是 $@ 扩展到的内容。 第一个依赖项是 hello.c 。 这就是 $< 扩展到的内容。 -c 标志生成 .o 文件; 有关详细说明,请参见 man gcc 。 -o 指定要创建的输出文件。 有关更多详细信息,您可以阅读 有关Linux Makefiles的文章 。 另外,您可以查看 GNU make 手册 。 这将使制作文件和调试它们变得更加容易。 如果运行此命令,它将输出makefile数据库: make

GNU Makefile变量赋值=,?=,:=和+ =有什么区别?

守給你的承諾、 提交于 2019-12-21 19:48:47
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 任何人都可以清楚地解释变量赋值在Makefiles中是如何工作的。 之间有什么区别: VARIABLE = value VARIABLE ?= value VARIABLE := value VARIABLE += value 我已经阅读了GNU Make手册中的 部分 ,但是对我来说仍然没有意义。 #1楼 我建议您使用“ make”做一些实验。 这是一个简单的演示,显示了 = 和 := 之间的区别。 /* Filename: Makefile*/ x := foo y := $(x) bar x := later a = foo b = $(a) bar a = later test: @echo x - $(x) @echo y - $(y) @echo a - $(a) @echo b - $(b) make test 打印: x - later y - foo bar a - later b - later bar 在这里查看更多详细的解释 #2楼 在以上答案中, 重要的是要了解 “在声明/使用时扩展值”的含义。 给出 *.c 类的值不需要任何扩展。 只有当命令使用此字符串时,它才可能触发一些glob。 类似地,像 $(wildcard *.c) 或 $(shell ls *.c) 不需要任何扩展