ARM Makefile段说明

时间:2016-12-16 08:49:35

标签: makefile kernel

脚本下方来自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.harch/arm/mach-s3c2410/include/mach/gpio.h或其他地方选择正确的。

2 个答案:

答案 0 :(得分:0)

$(machine-y)调用machine-y变量中存储的值。在make中,several ways可以为变量赋值。变量分配方式之一是从环境中提取的方法。引用GNU制作手册:

  

make中的变量可以来自运行make的环境。每个环境   使其在启动时看到的变量转换为具有相同的make变量   名称和价值。

如果您在任何一个makefile中找不到machine-y声明并且您没有通过命令行传递它,那么它很可能是一个环境变量。

检查this section以获取有关变量名允许字符的更多信息。基本上,只要您的shell /环境可以处理它们,您就可以使用除:#=whitespace之外的任何字符。

答案 1 :(得分:0)

回答你的问题:

  1. 是的,machine-y是内核Makefile中的一个变量。

  2. 最好查找Makefile的文档。

  3. 查找内核文件: arch/arm/Makefile,您可以看到以下代码:

    machine-$(CONFIG_ARCH_ALPINE) += alpine machine-$(CONFIG_ARCH_ARTPEC) += artpec machine-$(CONFIG_ARCH_AT91) += at91

  4. 当某些CONFIG_XXX被启用为&#34; y&#34;在内核配置中,&#34; machine-y&#34;变量将为其添加相应的字符串。在上面的例子中,如果将CONFIG_ARCH_ALPINE设置为&#39; y&#39;,则machine-y将添加&#34; alpine&#34;对自己。