脚本下方来自arch/arm/Makefile
。
ifneq ($(machine-y),)
MACHINE := arch/arm/mach-$(word 1,$(machine-y))/
else
MACHINE :=
endif
我的问题是:
1. machine-y
是变量吗?
2.除了字母,形成变量的合法字符是什么?
3.我找不到machine-y
的定义,编译器如何知道正确的目录?
例如,当我使用#include <mach/gpio.h>
时,编译器必须从arch/arm/mach-at91/include/mach/gpio.h
或arch/arm/mach-s3c2410/include/mach/gpio.h
或其他地方选择正确的。
答案 0 :(得分:0)
$(machine-y)
调用machine-y
变量中存储的值。在make中,several ways可以为变量赋值。变量分配方式之一是从环境中提取的方法。引用GNU制作手册:
make中的变量可以来自运行make的环境。每个环境 使其在启动时看到的变量转换为具有相同的make变量 名称和价值。
如果您在任何一个makefile中找不到machine-y
声明并且您没有通过命令行传递它,那么它很可能是一个环境变量。
检查this section以获取有关变量名允许字符的更多信息。基本上,只要您的shell /环境可以处理它们,您就可以使用除:
,#
,=
或whitespace
之外的任何字符。
答案 1 :(得分:0)
回答你的问题:
是的,machine-y是内核Makefile中的一个变量。
最好查找Makefile的文档。
查找内核文件: arch/arm/Makefile,您可以看到以下代码:
machine-$(CONFIG_ARCH_ALPINE) += alpine
machine-$(CONFIG_ARCH_ARTPEC) += artpec
machine-$(CONFIG_ARCH_AT91) += at91
当某些CONFIG_XXX被启用为&#34; y&#34;在内核配置中,&#34; machine-y&#34;变量将为其添加相应的字符串。在上面的例子中,如果将CONFIG_ARCH_ALPINE设置为&#39; y&#39;,则machine-y将添加&#34; alpine&#34;对自己。