奇怪的 Makefile,需要解释
Strange Makefile, need explanations
我正在尝试编译内核,但无法弄清楚它的 Makefile 是如何工作的:https://github.com/LineageOS/android_kernel_sony_msm8994/blob/cm-14.1/scripts/Makefile.build
因为我在构建时遇到这个错误:Build of a custom Linux/Android/LineageOS kernel in C doesn't work,我现在试图理解直到第 44 行。
为什么有几个扩展名为 .build
.clean
等的 Makefile 而不是将这些操作作为主 Makefile 中的“目标”?
我怎样才能弄清楚第一个 $(obj)
var 指的是什么?
数学语法 :=
“根据定义等于”而不是 =
是特定于开发人员的吗?如果我是对的,我确实在数学笔记或符号语言(例如 Wolfram/Mathematica 中看到了这一点,但从未在程序中看到过。
为什么 PHONY :=
是一个变量而不是文档中的“操作类型”?它应该写成 .PHONY:
作为文件的最后一行。我没有得到这个技巧。
为什么__build
PHONY
的值前有2个下划线?
感谢您的精确
- 因为编写 makefile 的人想将它们分解成单独的文件。也许它们包含在多个其他文件中,或者他们只是想让顶级 makefile 更清晰易读。
- 您可以 运行 使用
-p
选项进行制作,它将打印 makefile 中所有变量的所有值。
- 我不太明白这个问题:makefile中的
:=
运算符用于简单扩展变量赋值。有关详细信息,请参阅 GNU make manual。
- 设置变量
PHONY
包含一些内容。这只是一个普通的变量赋值,这里没有什么特别的。大概在 makefile 的其他地方会出现一行:.PHONY: $(PHONY)
and that will make all the targets in the PHONY
variable phony.
- 因为写makefile的人想用两个下划线
我正在尝试编译内核,但无法弄清楚它的 Makefile 是如何工作的:https://github.com/LineageOS/android_kernel_sony_msm8994/blob/cm-14.1/scripts/Makefile.build
因为我在构建时遇到这个错误:Build of a custom Linux/Android/LineageOS kernel in C doesn't work,我现在试图理解直到第 44 行。
为什么有几个扩展名为
.build
.clean
等的 Makefile 而不是将这些操作作为主 Makefile 中的“目标”?我怎样才能弄清楚第一个
$(obj)
var 指的是什么?数学语法
:=
“根据定义等于”而不是=
是特定于开发人员的吗?如果我是对的,我确实在数学笔记或符号语言(例如 Wolfram/Mathematica 中看到了这一点,但从未在程序中看到过。为什么
PHONY :=
是一个变量而不是文档中的“操作类型”?它应该写成.PHONY:
作为文件的最后一行。我没有得到这个技巧。为什么
__build
PHONY
的值前有2个下划线?
感谢您的精确
- 因为编写 makefile 的人想将它们分解成单独的文件。也许它们包含在多个其他文件中,或者他们只是想让顶级 makefile 更清晰易读。
- 您可以 运行 使用
-p
选项进行制作,它将打印 makefile 中所有变量的所有值。 - 我不太明白这个问题:makefile中的
:=
运算符用于简单扩展变量赋值。有关详细信息,请参阅 GNU make manual。 - 设置变量
PHONY
包含一些内容。这只是一个普通的变量赋值,这里没有什么特别的。大概在 makefile 的其他地方会出现一行:.PHONY: $(PHONY)
and that will make all the targets in thePHONY
variable phony. - 因为写makefile的人想用两个下划线