关于Makefile查找目标文件和make -f执行make的问题

来源:互联网 发布:webstorm 结对编程 编辑:程序博客网 时间:2024/06/06 10:45

1.Makefile关于查找目标文件得的问题

uImage中大量涉及到,目标的某一个依赖的标号在当前Makefile下找不到得情况。在之前的实验一直认为,在a文件下的Makefile需要子目录b下的b.o却没有关于b.o的标号定义的时候,make会自动在子目录b下的Makefile查找b.o的目标。下面验证是否正确。

1.1文件结构

主目录有a.cMakefile以及子目录b


子目录下有b.c以及Makefile


1.2代码

(1)a.c

voidmain(){}

(2)b.c

voidbbb(){}

(3)主目录的Makefile

all:bin

bin:a.o b/b.o

ld-o bin a.o b/b.o

a.o:a.c

gcc-c -o a.o a.c

clean:

rma.o bin

(4)b目录下的Makefile

all:

gcc-c -o b.o b.c

clean:

rm b.o

1.3执行结果


1.4结论

make在当前Makefile中未发现目标,会到相应的目录的Makefile继续查找规则。Ps:懒得搜资料,还是实验最实在。



2.make-f与之前得make的关系

内核中大量使用了make-f ,尤其是对于makefie-f scripts/Makefile.build,这里弄清出第一步make与这个make的关系。设计如下实验。

2.1文件结构

主目录是x,有一个Makefile,另外包含一个子目录y,且y子目录也有一个Makefile

2.2代码

(1)主目录Makefile

var1 :=100

exportvar1 from_x

.PHONY:all x abc

all:x abc

abc:

make-f ./y/Makefile

x:

@echoxxxx

from_x:

@echofrom_x

(2)子目录y下的Makefile

.PHONY:all

all:from_x

@echo$(var1)

2.3执行结果

(1)直接执行


所以,可以知道from_x是标号无法导出。

(2)把子目录下all后面的from_x去掉,再执行,如下:


可以知道export可以导出全局变量并在其他Makefile中生效。

(3)如果再把主目录Makefileexport那行话去掉,再执行,如下:


这里看到var1变量因为没有导出,就不生效了。所以可以确定的是make-f b/Makefile作为make引发的操作,不会与主make程序共享数据,当然export除外。

2.4结论

结论是make -f与引发其得make没有实际关系,不共享变量。不过,当然make可以给其子make程序传递变量参数。


0 0