Linux各级内核源代码的子目录下都有Makefile,大多数Makefile要嵌入主目录下的Rule.make,Rule.make将识别各个Makefile中所定义的一些变量。 变量**obj-y**表示需要编绎到内核中的目标文件名集合,定义O_TARGET表示将obj-y连接为一个O_TARGET名称的目标文件,定义L_TARGET表示将obj-y合并为一个L_TARGET名称的库文件。
文件的处理最后,给所有的变量加上相应的路径,以便编译的时候进行索引。 Makefile.lib通常都被包含在于Makefile.build中,这个变量继承了Makefile.build的obj变量。而Makefile.build的obj变量则是通过调用$(build)时进行赋值的。 9.5scripts/Makefile.build文件作用 9.5.1 包含include/config/auto.conf 包含include/confi...
:= #即时变量 = #延时变量 ?= #延时变量,如果是第1次定义才起效,如果在前面该变量已定义则忽略这句 += #附加,它是即时变量还是延时变量取决于前面的定义 Makefile A := $(C)B = $(C)C = abc#D = 100askD ?= weidongshanall:@echo A = $(A)@echo B = $(B)@echo D = $(D)C += 12...
然后更进一步,会使用$(obj)/Makefile(init/Makefile)中定义的变量来进行目标匹配。 __build在Makefile.build中的构建规则为: __build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \ $(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \ $(subdir-ym) $(always...
重点来看一下$(head-y) 、 $(init-y)、 $(core-y) 、 $(libs-y) 、 $(drivers-y) 和$(net-y)这六个变量的值。 1、 head-y head-y 定义在文件 arch/arm/Makefile 中,内容如下: 示例代码 35.5.3.3 arch/arm/Makefile 代码段 135 head-y := arch/arm/kernel/head$(MMUEXT).o 当不...
上述Makefile 中,变量 A 的值在执行时才确定,它等于 test,是延时变量。 如果使用“A := @”,这是立即变量,这时 @为空,所以 A 的值就是空。 C. 变量的导出(export): 在编译程序时,我们会不断地使用“make -C dir”切换到其他目录,执行其他目录里的 Makefile。如果想让某个变量的值在所有目录中都可见...
注:强烈建议在引用变量时,加下小括号或大括号,这样可以更安全地引用变量。 变量会在引用它的地方展开,如: foo=c prog.o:prog.$(foo) $(foo)$(foo)-$(foo)prog.$(foo) 1. 2. 3. 展开后得到: prog.o:prog.c cc-cprog.c 1. 2. 上面这个例子的用法,在实际生产,强烈不建议这么使用。
前两个参数,var和list将首先扩展,注意最后一个参数text此时不扩展;接着,list扩展所得的每个字,都赋给var变量;然后text引用该变量进行扩展,因此text每次扩展都不 相同。 函数的结果是由空格隔开的text在list中多次扩展后,得到的新list,就是说:text多次扩展的字串联起来,字与字之间由空格隔开,如此就产生了函数 for...
1. make变量(Makefile中定义的或者是make的环境变量)的引用使用“$(VAR)”格式,无论“VAR”是单字符变量名还是多字符变量名。 2. 出现在规则命令行中shell变量(一般为执行命令过程中的临时变量,它不属于Makefile变量,而是一个shell变量)引用使用shell的“$tmp”格式。
它除了定义 obj-y 来指定根目录下要编进程序去的文件、子目录外, 主要是定义工具链前缀CROSS_COMPILE,定义编译参数CFLAGS,定义链接参数LDFLAGS,这些参数就是文件中用export导出的各变量。 三、顶层目录的 Makefile.build: 这是最复杂的部分,它的功能就是把某个目录及它的所有子目录中、需要编进程序去的文件都编译...