如何让include/config/auto.conf超越终极目标先被执行的
其中
/gliethttp.ini是一个存在的空文件
/gliethttp/auto.conf不存在
我们可以看到,如果-include的文件不存在,首先不会报错,
其次如果在整个makefile中如果发现有创建该文件的规则,那么会在终极目标(第1个目标)
执行之前,首先尝试执行创建该-include文件的目标,
所以这时该文件目标就先于终极目标被make执行[luther.gliethttp]
- {{{
-
all:
-
@echo 111
-
-include /gliethttp/auto.conf
-
/gliethttp/auto.conf:
-
@echo 222
-
-include /gliethttp.ini
-
/gliethttp.ini:
-
@echo 333
-
}}}
luther@gliethttp:~$ make
222
111
来看看kernel的Makefile片段,
当我们执行make时,首先Makefile被make走一遍,提取规则和变量等,
如果是第1次执行,那么include/config/auto.conf并不存在,
所以我们看到
make -f /home/gliethttp/kernel/Makefile silentoldconfig
是第1条被执行的规则命令
luther@gliethttp:~/kernel$ make V=1
- {{{
-
make -f /home/gliethttp/kernel/Makefile silentoldconfig
-
make -f scripts/Makefile.build obj=scripts/basic
-
gcc -Wp,-MD,scripts/basic/.fixdep.d -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -o scripts/basic/fixdep scripts/basic/fixdep.c
-
gcc -Wp,-MD,scripts/basic/.docproc.d -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -o scripts/basic/docproc scripts/basic/docproc.c
-
gcc -Wp,-MD,scripts/basic/.hash.d -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -o scripts/basic/hash scripts/basic/hash.c
-
mkdir -p include/linux include/config
-
make -f scripts/Makefile.build obj=scripts/kconfig silentoldconfig
-
}}}
如下是kernel的Makefile片段内容
- {{{
- # Read in config
-
-include include/config/auto.conf
-
-
ifeq ($(KBUILD_EXTMOD),)
-
# Read in dependencies to all Kconfig* files, make sure to run
-
# oldconfig if changes are detected.
-
-include include/config/auto.conf.cmd
-
-
# To avoid any implicit rule to kick in, define an empty command
-
$(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
-
-
# If .config is newer than include/config/auto.conf, someone tinkered
-
# with it and forgot to run make oldconfig.
-
# if auto.conf.cmd is missing then we are probably in a cleaned tree so
-
# we execute the config step to be sure to catch updated Kconfig files
-
include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
-
$(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
-
}}}
阅读(5005) | 评论(0) | 转发(0) |