其中
/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
- }}}