文章目录
- make distclean
- 步骤1:2090-2114行,执行依赖 clean
- 步骤2:2120-2124行,执行依赖 $(mrproper-dirs)
- 步骤3:2118-2129行,执行依赖 mrproper
- 步骤4:2135-2142行,实现 distclean
编译后执行 make distclean V=1
001 make -f ./scripts/Makefile.clean obj=api
002 make -f ./scripts/Makefile.clean obj=cmd
003 make -f ./scripts/Makefile.clean obj=cmd/arm
004 make -f ./scripts/Makefile.clean obj=cmd/broadcom
005 make -f ./scripts/Makefile.clean obj=cmd/mvebu
006 make -f ./scripts/Makefile.clean obj=cmd/riscv
007 make -f ./scripts/Makefile.clean obj=cmd/sandbox
008 make -f ./scripts/Makefile.clean obj=cmd/ti
009 make -f ./scripts/Makefile.clean obj=cmd/x86
010 make -f ./scripts/Makefile.clean obj=common
011 make -f ./scripts/Makefile.clean obj=common/init
012 make -f ./scripts/Makefile.clean obj=disk
013 make -f ./scripts/Makefile.clean obj=drivers
014 make -f ./scripts/Makefile.clean obj=drivers/adc
015 make -f ./scripts/Makefile.clean obj=drivers/ata
016 make -f ./scripts/Makefile.clean obj=drivers/axi
017 make -f ./scripts/Makefile.clean obj=drivers/bios_emulator
018 make -f ./scripts/Makefile.clean obj=drivers/block
019 make -f ./scripts/Makefile.clean obj=drivers/bootcount
020 make -f ./scripts/Makefile.clean obj=drivers/bus
021 make -f ./scripts/Makefile.clean obj=drivers/button
022 make -f ./scripts/Makefile.clean obj=drivers/cache
023 make -f ./scripts/Makefile.clean obj=drivers/clk
024 make -f ./scripts/Makefile.clean obj=drivers/clk/altera
025 make -f ./scripts/Makefile.clean obj=drivers/clk/analogbits
026 make -f ./scripts/Makefile.clean obj=drivers/clk/aspeed
027 make -f ./scripts/Makefile.clean obj=drivers/clk/at91
028 make -f ./scripts/Makefile.clean obj=drivers/clk/exynos
029 make -f ./scripts/Makefile.clean obj=drivers/clk/imx
030 make -f ./scripts/Makefile.clean obj=drivers/clk/intel
031 make -f ./scripts/Makefile.clean obj=drivers/clk/kendryte
032 make -f ./scripts/Makefile.clean obj=drivers/clk/mediatek
033 make -f ./scripts/Makefile.clean obj=drivers/clk/meson
034 make -f ./scripts/Makefile.clean obj=drivers/clk/microchip
035 make -f ./scripts/Makefile.clean obj=drivers/clk/mtmips
036 make -f ./scripts/Makefile.clean obj=drivers/clk/mvebu
037 make -f ./scripts/Makefile.clean obj=drivers/clk/owl
038 make -f ./scripts/Makefile.clean obj=drivers/clk/renesas
039 make -f ./scripts/Makefile.clean obj=drivers/clk/rockchip
040 make -f ./scripts/Makefile.clean obj=drivers/clk/sifive
041 make -f ./scripts/Makefile.clean obj=drivers/clk/sunxi
042 make -f ./scripts/Makefile.clean obj=drivers/clk/tegra
043 make -f ./scripts/Makefile.clean obj=drivers/clk/ti
044 make -f ./scripts/Makefile.clean obj=drivers/clk/uniphier
045 make -f ./scripts/Makefile.clean obj=drivers/core
046 make -f ./scripts/Makefile.clean obj=drivers/cpu
047 make -f ./scripts/Makefile.clean obj=drivers/crypto
048 make -f ./scripts/Makefile.clean obj=drivers/crypto/fsl
049 make -f ./scripts/Makefile.clean obj=drivers/crypto/rsa_mod_exp
050 make -f ./scripts/Makefile.clean obj=drivers/ddr/microchip
051 make -f ./scripts/Makefile.clean obj=drivers/demo
052 make -f ./scripts/Makefile.clean obj=drivers/dfu
053 make -f ./scripts/Makefile.clean obj=drivers/fastboot
054 make -f ./scripts/Makefile.clean obj=drivers/firmware
055 make -f ./scripts/Makefile.clean obj=drivers/firmware/scmi
056 make -f ./scripts/Makefile.clean obj=drivers/fpga
057 make -f ./scripts/Makefile.clean obj=drivers/gpio
058 make -f ./scripts/Makefile.clean obj=drivers/hwspinlock
059 make -f ./scripts/Makefile.clean obj=drivers/i2c
060 make -f ./scripts/Makefile.clean obj=drivers/i2c/muxes
061 make -f ./scripts/Makefile.clean obj=drivers/input
062 make -f ./scripts/Makefile.clean obj=drivers/led
063 make -f ./scripts/Makefile.clean obj=drivers/mailbox
064 make -f ./scripts/Makefile.clean obj=drivers/memory
065 make -f ./scripts/Makefile.clean obj=drivers/misc
066 make -f ./scripts/Makefile.clean obj=drivers/misc/imx8
067 make -f ./scripts/Makefile.clean obj=drivers/mmc
068 make -f ./scripts/Makefile.clean obj=drivers/mtd
069 make -f ./scripts/Makefile.clean obj=drivers/mtd/nand
070 make -f ./scripts/Makefile.clean obj=drivers/mtd/nand/raw
071 make -f ./scripts/Makefile.clean obj=drivers/mtd/nand/raw/brcmnand
072 make -f ./scripts/Makefile.clean obj=drivers/mtd/nand/spi
073 make -f ./scripts/Makefile.clean obj=drivers/mtd/onenand
074 make -f ./scripts/Makefile.clean obj=drivers/mtd/spi
075 make -f ./scripts/Makefile.clean obj=drivers/mtd/ubi
076 make -f ./scripts/Makefile.clean obj=drivers/mux
077 make -f ./scripts/Makefile.clean obj=drivers/nvme
078 make -f ./scripts/Makefile.clean obj=drivers/pch
079 make -f ./scripts/Makefile.clean obj=drivers/pci
080 make -f ./scripts/Makefile.clean obj=drivers/pci_endpoint
081 make -f ./scripts/Makefile.clean obj=drivers/phy
082 make -f ./scripts/Makefile.clean obj=drivers/phy/allwinner
083 make -f ./scripts/Makefile.clean obj=drivers/phy/marvell
084 make -f ./scripts/Makefile.clean obj=drivers/phy/rockchip
085 make -f ./scripts/Makefile.clean obj=drivers/pinctrl
086 make -f ./scripts/Makefile.clean obj=drivers/pinctrl/aspeed
087 make -f ./scripts/Makefile.clean obj=drivers/pinctrl/ath79
088 make -f ./scripts/Makefile.clean obj=drivers/pinctrl/broadcom
089 make -f ./scripts/Makefile.clean obj=drivers/pinctrl/exynos
090 make -f ./scripts/Makefile.clean obj=drivers/pinctrl/intel
091 make -f ./scripts/Makefile.clean obj=drivers/pinctrl/mediatek
092 make -f ./scripts/Makefile.clean obj=drivers/pinctrl/meson
093 make -f ./scripts/Makefile.clean obj=drivers/pinctrl/mscc
094 make -f ./scripts/Makefile.clean obj=drivers/pinctrl/mtmips
095 make -f ./scripts/Makefile.clean obj=drivers/pinctrl/mvebu
096 make -f ./scripts/Makefile.clean obj=drivers/pinctrl/nexell
097 make -f ./scripts/Makefile.clean obj=drivers/pinctrl/nxp
098 make -f ./scripts/Makefile.clean obj=drivers/pinctrl/renesas
099 make -f ./scripts/Makefile.clean obj=drivers/pinctrl/rockchip
100 make -f ./scripts/Makefile.clean obj=drivers/pinctrl/uniphier
101 make -f ./scripts/Makefile.clean obj=drivers/power/acpi_pmc
102 make -f ./scripts/Makefile.clean obj=drivers/pwm
103 make -f ./scripts/Makefile.clean obj=drivers/qe
104 make -f ./scripts/Makefile.clean obj=drivers/ram
105 make -f ./scripts/Makefile.clean obj=drivers/ram/aspeed
106 make -f ./scripts/Makefile.clean obj=drivers/ram/k3-ddrss
107 make -f ./scripts/Makefile.clean obj=drivers/ram/mediatek
108 make -f ./scripts/Makefile.clean obj=drivers/ram/octeon
109 make -f ./scripts/Makefile.clean obj=drivers/ram/rockchip
110 make -f ./scripts/Makefile.clean obj=drivers/ram/sifive
111 make -f ./scripts/Makefile.clean obj=drivers/ram/stm32mp1
112 make -f ./scripts/Makefile.clean obj=drivers/remoteproc
113 make -f ./scripts/Makefile.clean obj=drivers/reset
114 make -f ./scripts/Makefile.clean obj=drivers/rng
115 make -f ./scripts/Makefile.clean obj=drivers/rtc
116 make -f ./scripts/Makefile.clean obj=drivers/scsi
117 make -f ./scripts/Makefile.clean obj=drivers/serial
118 make -f ./scripts/Makefile.clean obj=drivers/smem
119 make -f ./scripts/Makefile.clean obj=drivers/soc
120 make -f ./scripts/Makefile.clean obj=drivers/soc/ti
121 make -f ./scripts/Makefile.clean obj=drivers/sound
122 make -f ./scripts/Makefile.clean obj=drivers/spi
123 make -f ./scripts/Makefile.clean obj=drivers/spmi
124 make -f ./scripts/Makefile.clean obj=drivers/sysinfo
125 make -f ./scripts/Makefile.clean obj=drivers/sysreset
126 make -f ./scripts/Makefile.clean obj=drivers/tee
127 make -f ./scripts/Makefile.clean obj=drivers/tee/broadcom
128 make -f ./scripts/Makefile.clean obj=drivers/tee/optee
129 make -f ./scripts/Makefile.clean obj=drivers/thermal
130 make -f ./scripts/Makefile.clean obj=drivers/timer
131 make -f ./scripts/Makefile.clean obj=drivers/tpm
132 make -f ./scripts/Makefile.clean obj=drivers/ufs
133 make -f ./scripts/Makefile.clean obj=drivers/video
134 make -f ./scripts/Makefile.clean obj=drivers/video/bridge
135 make -f ./scripts/Makefile.clean obj=drivers/video/exynos
136 make -f ./scripts/Makefile.clean obj=drivers/video/imx
137 make -f ./scripts/Makefile.clean obj=drivers/video/meson
138 make -f ./scripts/Makefile.clean obj=drivers/video/nexell
139 make -f ./scripts/Makefile.clean obj=drivers/video/nexell/soc
140 make -f ./scripts/Makefile.clean obj=drivers/video/rockchip
141 make -f ./scripts/Makefile.clean obj=drivers/video/stm32
142 make -f ./scripts/Makefile.clean obj=drivers/video/sunxi
143 make -f ./scripts/Makefile.clean obj=drivers/video/tegra124
144 make -f ./scripts/Makefile.clean obj=drivers/video/ti
145 make -f ./scripts/Makefile.clean obj=drivers/virtio
146 make -f ./scripts/Makefile.clean obj=drivers/w1
147 make -f ./scripts/Makefile.clean obj=drivers/w1-eeprom
148 make -f ./scripts/Makefile.clean obj=drivers/watchdog
149 make -f ./scripts/Makefile.clean obj=drivers/xen
150 make -f ./scripts/Makefile.clean obj=drivers/ddr/altera
151 make -f ./scripts/Makefile.clean obj=drivers/ddr/fsl
152 make -f ./scripts/Makefile.clean obj=drivers/dma
153 make -f ./scripts/Makefile.clean obj=drivers/dma/ti
154 make -f ./scripts/Makefile.clean obj=drivers/gpio
155 make -f ./scripts/Makefile.clean obj=drivers/i2c
156 make -f ./scripts/Makefile.clean obj=drivers/i2c/muxes
157 make -f ./scripts/Makefile.clean obj=drivers/net
158 make -f ./scripts/Makefile.clean obj=drivers/net/fsl-mc
159 make -f ./scripts/Makefile.clean obj=drivers/net/fsl-mc/dpio
160 make -f ./scripts/Makefile.clean obj=drivers/net/ldpaa_eth
161 make -f ./scripts/Makefile.clean obj=drivers/net/mscc_eswitch
162 make -f ./scripts/Makefile.clean obj=drivers/net/octeontx
163 make -f ./scripts/Makefile.clean obj=drivers/net/octeontx2
164 make -f ./scripts/Makefile.clean obj=drivers/net/pfe_eth
165 make -f ./scripts/Makefile.clean obj=drivers/net/qe
166 make -f ./scripts/Makefile.clean obj=drivers/net/ti
167 make -f ./scripts/Makefile.clean obj=drivers/net/fm
168 make -f ./scripts/Makefile.clean obj=drivers/net/phy
169 make -f ./scripts/Makefile.clean obj=drivers/power
170 make -f ./scripts/Makefile.clean obj=drivers/power/battery
171 make -f ./scripts/Makefile.clean obj=drivers/power/domain
172 make -f ./scripts/Makefile.clean obj=drivers/power/fuel_gauge
173 make -f ./scripts/Makefile.clean obj=drivers/power/mfd
174 make -f ./scripts/Makefile.clean obj=drivers/power/pmic
175 make -f ./scripts/Makefile.clean obj=drivers/power/regulator
176 make -f ./scripts/Makefile.clean obj=drivers/serial
177 make -f ./scripts/Makefile.clean obj=drivers/spi
178 make -f ./scripts/Makefile.clean obj=drivers/usb/cdns3
179 make -f ./scripts/Makefile.clean obj=drivers/usb/common
180 make -f ./scripts/Makefile.clean obj=drivers/usb/dwc3
181 make -f ./scripts/Makefile.clean obj=drivers/usb/emul
182 make -f ./scripts/Makefile.clean obj=drivers/usb/eth
183 make -f ./scripts/Makefile.clean obj=drivers/usb/gadget
184 make -f ./scripts/Makefile.clean obj=drivers/usb/gadget/udc
185 make -f ./scripts/Makefile.clean obj=drivers/usb/host
186 make -f ./scripts/Makefile.clean obj=drivers/usb/mtu3
187 make -f ./scripts/Makefile.clean obj=drivers/usb/musb
188 make -f ./scripts/Makefile.clean obj=drivers/usb/musb-new
189 make -f ./scripts/Makefile.clean obj=drivers/usb/phy
190 make -f ./scripts/Makefile.clean obj=drivers/usb/ulpi
191 make -f ./scripts/Makefile.clean obj=dts
192 make -f ./scripts/Makefile.clean obj=dts/../arch/arm/dts
193 rm -f dts/../arch/arm/dts/bcm2837-rpi-3-b.dtb dts/../arch/arm/dts/bcm2835-rpi-b-plus.dtb dts/../arch/arm/dts/bcm2835-rpi-a-plus.dtb dts/../arch/arm/dts/bcm2835-rpi-b.dtb dts/../arch/arm/dts/bcm2835-rpi-a.dtb dts/../arch/arm/dts/bcm2835-rpi-cm1-io1.dtb dts/../arch/arm/dts/bcm2837-rpi-3-b-plus.dtb dts/../arch/arm/dts/bcm2835-rpi-zero-w.dtb dts/../arch/arm/dts/bcm2835-rpi-b-rev2.dtb dts/../arch/arm/dts/bcm2836-rpi-2-b.dtb dts/../arch/arm/dts/bcm2837-rpi-3-a-plus.dtb dts/../arch/arm/dts/bcm2837-rpi-cm3-io3.dtb dts/../arch/arm/dts/bcm2835-rpi-zero.dtb
194 make -f ./scripts/Makefile.clean obj=dts/../arch/microblaze/dts
195 make -f ./scripts/Makefile.clean obj=dts/../arch/mips/dts
196 make -f ./scripts/Makefile.clean obj=dts/../arch/powerpc/dts
197 make -f ./scripts/Makefile.clean obj=dts/../arch/riscv/dts
198 make -f ./scripts/Makefile.clean obj=dts/../arch/sandbox/dts
199 make -f ./scripts/Makefile.clean obj=dts/../arch/x86/dts
200 rm -f dts/dt.dtb dts/dt.dtb.S
201 make -f ./scripts/Makefile.clean obj=env
202 make -f ./scripts/Makefile.clean obj=examples
203 make -f ./scripts/Makefile.clean obj=fs
204 make -f ./scripts/Makefile.clean obj=fs/btrfs
205 make -f ./scripts/Makefile.clean obj=fs/cbfs
206 make -f ./scripts/Makefile.clean obj=fs/cramfs
207 make -f ./scripts/Makefile.clean obj=fs/ext4
208 make -f ./scripts/Makefile.clean obj=fs/fat
209 make -f ./scripts/Makefile.clean obj=fs/jffs2
210 make -f ./scripts/Makefile.clean obj=fs/reiserfs
211 make -f ./scripts/Makefile.clean obj=fs/sandbox
212 make -f ./scripts/Makefile.clean obj=fs/squashfs
213 make -f ./scripts/Makefile.clean obj=fs/ubifs
214 make -f ./scripts/Makefile.clean obj=fs/yaffs2
215 make -f ./scripts/Makefile.clean obj=fs/zfs
216 make -f ./scripts/Makefile.clean obj=lib
217 make -f ./scripts/Makefile.clean obj=lib/acpi
218 make -f ./scripts/Makefile.clean obj=lib/aes
219 make -f ./scripts/Makefile.clean obj=lib/at91
220 make -f ./scripts/Makefile.clean obj=lib/bzip2
221 make -f ./scripts/Makefile.clean obj=lib/crypto
222 make -f ./scripts/Makefile.clean obj=lib/dhry
223 make -f ./scripts/Makefile.clean obj=lib/efi
224 make -f ./scripts/Makefile.clean obj=lib/efi_driver
225 make -f ./scripts/Makefile.clean obj=lib/efi_loader
226 make -f ./scripts/Makefile.clean obj=lib/efi_selftest
227 make -f ./scripts/Makefile.clean obj=lib/libavb
228 make -f ./scripts/Makefile.clean obj=lib/libfdt
229 make -f ./scripts/Makefile.clean obj=lib/lzma
230 make -f ./scripts/Makefile.clean obj=lib/lzo
231 make -f ./scripts/Makefile.clean obj=lib/optee
232 make -f ./scripts/Makefile.clean obj=lib/rsa
233 make -f ./scripts/Makefile.clean obj=lib/tizen
234 make -f ./scripts/Makefile.clean obj=lib/zlib
235 make -f ./scripts/Makefile.clean obj=lib/zstd
236 make -f ./scripts/Makefile.clean obj=net
237 make -f ./scripts/Makefile.clean obj=test
238 make -f ./scripts/Makefile.clean obj=test/cmd
239 make -f ./scripts/Makefile.clean obj=test/dm
240 make -f ./scripts/Makefile.clean obj=test/image
241 make -f ./scripts/Makefile.clean obj=test/lib
242 make -f ./scripts/Makefile.clean obj=test/log
243 make -f ./scripts/Makefile.clean obj=test/env
244 make -f ./scripts/Makefile.clean obj=test/optee
245 make -f ./scripts/Makefile.clean obj=test/overlay
246 make -f ./scripts/Makefile.clean obj=tools
247 make -f ./scripts/Makefile.clean obj=tools/env
248 make -f ./scripts/Makefile.clean obj=tools/gdb
249 rm -f tools/mkenvimage tools/dumpimage tools/mkimage tools/proftool tools/fdtgrep tools/spl_size_limit tools/mkenvimage tools/dumpimage tools/mkimage tools/proftool tools/fdtgrep tools/spl_size_limit tools/gen_eth_addr tools/gen_ethaddr_crc tools/img2srec
250 rm -rf tools/lib tools/common
251 rm -rf .tmp_versions
252 rm -f include/bmp_logo.h include/bmp_logo_data.h tools/version.h boot* u-boot* MLO* SPL System.map fit-dtb.blob* u-boot-ivt.img.log u-boot-dtb.imx.log SPL.log u-boot.imx.log lpc32xx-* bl31.c bl31.elf bl31_*.bin image.map tispl.bin* idbloader.img flash.bin flash.log defconfig keep-syms-lto.c
253 make -f ./scripts/Makefile.clean obj=scripts
254 make -f ./scripts/Makefile.clean obj=scripts/basic
255 rm -f scripts/basic/fixdep scripts/basic/fixdep
256 make -f ./scripts/Makefile.clean obj=scripts/dtc
257 make -f ./scripts/Makefile.clean obj=scripts/dtc/pylibfdt
258 rm -f scripts/dtc/dtc scripts/dtc/dtc
259 make -f ./scripts/Makefile.clean obj=scripts/kconfig
260 rm -f scripts/kconfig/conf
261 rm -rf include/config include/generated
262 rm -f .config .config.old include/autoconf.mk include/autoconf.mk.dep include/config.h
make distclean
94 ifeq ("$(origin V)", "command line") 95 KBUILD_VERBOSE = $(V) 96 endif 97 ifndef KBUILD_VERBOSE 98 KBUILD_VERBOSE = 0 99 endif 100 101 ifeq ($(KBUILD_VERBOSE),1) 102 quiet = 103 Q = 104 else 105 quiet=quiet_ 106 Q = @ 107 endif ...... 224 ifeq ($(KBUILD_SRC),) 225 # building in the source tree 226 srctree := . 227 else 228 ifeq ($(KBUILD_SRC)/,$(dir $(CURDIR))) 229 # building in a subdirectory of the source tree 230 srctree := .. 231 else 232 srctree := $(KBUILD_SRC) 233 endif 234 endif ...... 470 export RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o \ 471 -name CVS -o -name .pc -o -name .hg -o -name .git \) \ 472 -prune -o ...... 2090 clean: rm-dirs := $(CLEAN_DIRS) 2091 clean: rm-files := $(CLEAN_FILES) 2101 clean: $(clean-dirs) 2102 $(call cmd,rmdirs) 2103 $(call cmd,rmfiles) 2104 @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \ 2105 \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ 2106 -o -name '*.ko.*' -o -name '*.su' -o -name '*.pyc' \ 2107 -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ 2108 -o -name '*.lex.c' -o -name '*.tab.[ch]' \ 2109 -o -name '*.asn1.[ch]' \ 2110 -o -name '*.symtypes' -o -name 'modules.order' \ 2111 -o -name modules.builtin -o -name '.tmp_*.o.*' \ 2112 -o -name 'dsdt.aml' -o -name 'dsdt.asl.tmp' -o -name 'dsdt.c' \ 2113 -o -name '*.efi' -o -name '*.gcno' -o -name '*.so' \) \ 2114 -type f -print | xargs rm -f ...... 2120 mrproper-dirs := $(addprefix _mrproper_,scripts) 2123 $(mrproper-dirs) : 2124 $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@) ...... 2118 mrproper: rm-dirs := $(wildcard $(MRPROPER_DIRS)) 2119 mrproper: rm-files := $(wildcard $(MRPROPER_FILES)) 2126 mrproper: clean $(mrproper-dirs) 2127 $(call cmd,rmdirs) 2128 $(call cmd,rmfiles) 2129 @rm -f arch/*/include/asm/arch ...... 2135 distclean: mrproper 2136 @find $(srctree) $(RCS_FIND_IGNORE) \ 2137 \( -name '*.orig' -o -name '*.rej' -o -name '*~' \ 2138 -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \ 2139 -o -name '.*.rej' -o -name '*%' -o -name 'core' \ 2140 -o -name '*.pyc' \) \ 2141 -type f -print | xargs rm -f 2142 @rm -f boards.cfg CHANGELOG
当在命令行中输入:
make distclean V=1
时,94行条件成立,KBUILD_VERBOSE = 1
,101行条件成立,quiet 和 Q 为空
,则输出整个命令。
输入命令自动匹配顶层 Makefile 的第2135 行并执行,由于目标 distclean 依赖 mrproper, mrproper 依赖 clean 和 $(mrproper-dirs)执行顺序如下:1. 优先执行依赖 clean,即
2090-2114行
2. 再执行依赖$(mrproper-dirs),即2120-2124行
3. 上面两步完成 mrproper 依赖的实现,然后完成 mrproper 最后的实现语句,即2127-2129行
4. 经过上面三步完成 distclean 依赖的实现,最后完成 distclean 的实现语句,即2136-2142行
步骤1:2090-2114行,执行依赖 clean
2090 clean: rm-dirs := $(CLEAN_DIRS)
2091 clean: rm-files := $(CLEAN_FILES)
2092
2093 clean-dirs := $(foreach f,$(u-boot-alldirs),$(if $(wildcard $(srctree)/$f/Makefile),$f))
2094
2095 clean-dirs := $(addprefix _clean_, $(clean-dirs))
2096
2097
2098 $(clean-dirs):
2099 $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
2100
2101 clean: $(clean-dirs)
2102 $(call cmd,rmdirs)
2103 $(call cmd,rmfiles)
2104 @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
2105 \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
2106 -o -name '*.ko.*' -o -name '*.su' -o -name '*.pyc' \
2107 -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
2108 -o -name '*.lex.c' -o -name '*.tab.[ch]' \
2109 -o -name '*.asn1.[ch]' \
2110 -o -name '*.symtypes' -o -name 'modules.order' \
2111 -o -name modules.builtin -o -name '.tmp_*.o.*' \
2112 -o -name 'dsdt.aml' -o -name 'dsdt.asl.tmp' -o -name 'dsdt.c' \
2113 -o -name '*.efi' -o -name '*.gcno' -o -name '*.so' \) \
2114 -type f -print | xargs rm -f
从上面可以看出,clean 依赖
rm-dirs := $(CLEAN_DIRS)
、rm-files := $(CLEAN_FILES)
、$(clean-dirs)
2090行:clean 依赖
rm-dirs := $(CLEAN_DIRS)
,没有实现语句,所以这里只需要将依赖展开即可。
$(CLEAN_DIRS)
在顶层 Makefile 的第2069-2071行中定义,其中的 $(MODVERDIR) 在第466行中定义, foreach 函数、filter-out函数、patsubst函数、firstword函数466 export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions ...... 2069 CLEAN_DIRS += $(MODVERDIR) \ 2070 $(foreach d, spl tpl, $(patsubst %,$d/%, \ 2071 $(filter-out include, $(shell ls -1 $d 2>/dev/null))))
当命令行输入
make M=dir
,则 KBUILD_EXTMOD=dir,否则 KBUILD_EXTMOD 为空。由于命令行没有M=
,所以MODVERDIR = .tmp_versions
。
2070行中的spl、tpl
不存在,所以2070-2071行为空,最终展开为:2090 clean: rm-dirs := .tmp_versions
2091行:clean 依赖
rm-files := $(CLEAN_FILES)
,没有实现语句,所以这里只需要将依赖展开即可。
$(CLEAN_FILES)
在顶层 Makefile 的第2073-2077行中定义,2073 CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h tools/version.h \ 2074 boot* u-boot* MLO* SPL System.map fit-dtb.blob* \ 2075 u-boot-ivt.img.log u-boot-dtb.imx.log SPL.log u-boot.imx.log \ 2076 lpc32xx-* bl31.c bl31.elf bl31_*.bin image.map tispl.bin* \ 2077 idbloader.img flash.bin flash.log defconfig keep-syms-lto.c
最终展开为:
2091 clean: rm-files := include/bmp_logo.h include/bmp_logo_data.h tools/version.h boot* u-boot* MLO* SPL System.map fit-dtb.blob* u-boot-ivt.img.log u-boot-dtb.imx.log SPL.log u-boot.imx.log lpc32xx-* bl31.c bl31.elf bl31_*.bin image.map tispl.bin* idbloader.img flash.bin flash.log defconfig keep-syms-lto.c
2101行:clean 依赖
$(clean-disrs)
,在第2093-2099行定义:2093 clean-dirs := $(foreach f,$(u-boot-alldirs),$(if $(wildcard $(srctree)/$f/Makefile),$f)) 2095 clean-dirs := $(addprefix _clean_, $(clean-dirs)) 2098 $(clean-dirs): 2099 $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
2093行:中的
$(u-boot-alldirs)
在顶层 Makefile 的第792-853行定义:其实就 从变量$(u-boot-alldirs)
中轮询查找相应目录下是否存在 Makefile 文件,将有 Makefile 文件的目录名依次赋值给变量clean-dirs
。最终:$(clean-dirs) = $(u-boot-alldirs)
[即:重新排序去重并且去除目录名最后的/
后的 $(libs-) $(libs-y)]2095行:将变量
$(clean-dirs)
中的所有内容前缀加上_clean_
2099行:$(clean)
在 scripts/Kbuild.include [顶层Makefile第386行中引用]文件的第202行定义: clean := -f $(srctree)/scripts/Makefile.clean obj,
在顶层Makefile中,srctree = .
所以: clean := -f ./scripts/Makefile.clean obj
结果:/scripts/Makefile.clean分析,会将2098行目标中所有包含Makefile的目录及其子目录全部回显出来,执行并回显001-250行
。001 make -f ./scripts/Makefile.clean obj=api 002 make -f ./scripts/Makefile.clean obj=cmd ...... 250 rm -rf tools/lib tools/common
foreach函数、wildcard函数、sort函数、patsubst函数、filter函数、addprefix函数
792 HAVE_VENDOR_COMMON_LIB = $(if $(wildcard $(srctree)/board/$(VENDOR)/common/Makefile),y,n) 793 794 libs-y += lib/ 795 libs-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/ 796 libs-$(CONFIG_OF_EMBED) += dts/ 797 libs-y += fs/ 798 libs-y += net/ 799 libs-y += disk/ 800 libs-y += drivers/ 801 libs-y += drivers/dma/ 802 libs-y += drivers/gpio/ 803 libs-y += drivers/i2c/ 804 libs-y += drivers/net/ 805 libs-y += drivers/net/phy/ 806 libs-y += drivers/power/ \ 807 drivers/power/domain/ \ 808 drivers/power/fuel_gauge/ \ 809 drivers/power/mfd/ \ 810 drivers/power/pmic/ \ 811 drivers/power/battery/ \ 812 drivers/power/regulator/ 813 libs-y += drivers/spi/ 814 libs-$(CONFIG_FMAN_ENET) += drivers/net/fm/ 815 libs-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/ 816 libs-$(CONFIG_SYS_FSL_MMDC) += drivers/ddr/fsl/ 817 libs-$(CONFIG_$(SPL_)ALTERA_SDRAM) += drivers/ddr/altera/ 818 libs-y += drivers/serial/ 819 libs-y += drivers/usb/cdns3/ 820 libs-y += drivers/usb/dwc3/ 821 libs-y += drivers/usb/common/ 822 libs-y += drivers/usb/emul/ 823 libs-y += drivers/usb/eth/ 824 libs-$(CONFIG_USB_DEVICE) += drivers/usb/gadget/ 825 libs-$(CONFIG_USB_GADGET) += drivers/usb/gadget/ 826 libs-$(CONFIG_USB_GADGET) += drivers/usb/gadget/udc/ 827 libs-y += drivers/usb/host/ 828 libs-y += drivers/usb/mtu3/ 829 libs-y += drivers/usb/musb/ 830 libs-y += drivers/usb/musb-new/ 831 libs-y += drivers/usb/phy/ 832 libs-y += drivers/usb/ulpi/ 833 libs-y += cmd/ 834 libs-y += common/ 835 libs-y += env/ 836 libs-$(CONFIG_API) += api/ 837 ifdef CONFIG_POST 838 libs-y += post/ 839 endif 840 libs-$(CONFIG_UNIT_TEST) += test/ 841 libs-$(CONFIG_UT_ENV) += test/env/ 842 libs-$(CONFIG_UT_OPTEE) += test/optee/ 843 libs-$(CONFIG_UT_OVERLAY) += test/overlay/ 844 845 libs-y += $(if $(BOARDDIR),board/$(BOARDDIR)/) 846 847 libs-y := $(sort $(libs-y)) 848 849 u-boot-dirs := $(patsubst %/,%,$(filter %/, $(libs-y))) tools examples 850 851 u-boot-alldirs := $(sort $(u-boot-dirs) $(patsubst %/,%,$(filter %/, $(libs-)))) 852
其中所有的变量都未定义,所以
lib-
和libs-y
变量定义如下:
libs- libs-y dts/ ;drivers/net/fm/;
drivers/ddr/fsl/
;
drivers/ddr/fsl/
;
drivers/ddr/altera/;
drivers/usb/gadget/
;
drivers/usb/gadget/
;
drivers/usb/gadget/udc/;
api/;test/ ;test/env/ ;test/optee/ ;test/overlay/;lib/ ; fs/Cnet/ ; disk/ ; drivers/ ; drivers/dma/ ;drivers/gpio/ ; drivers/i2c/ ; drivers/net/ ; drivers/net/phy/ ; drivers/power/ ; drivers/power/domain/ ; drivers/power/fuel_gauge/ ; drivers/power/mfd/ ; drivers/power/pmic/ ; drivers/power/battery/drivers/power/regulator/ ; drivers/spi/ ; drivers/serial/ ; drivers/usb/cdns3/ ; drivers/usb/dwc3/ ; drivers/usb/common/ ; drivers/usb/emul/ ; drivers/usb/eth/ ; drivers/usb/host/ ; drivers/usb/mtu3/ ; drivers/usb/musb/ ; drivers/usb/musb-new/ ; drivers/usb/phy/ ; drivers/usb/ulpi/ ; cmd/ ; common/ ; env/ ; 第849行,将
$(libs-y)
变量最后一个/
去除后的变量,并且追加tools examples
到变量$(u-boot-dirs)
。
第851行,将$(libs-)
变量最后一个/
去除后的变量 和 变量$(u-boot-dirs)
一起重新排序去重后赋值给变量$(u-boot-alldirs)
。
2102行:call函数、cmd函数分析,cmd_rmdir 函数:
rm -rf $(rm-dirs)
结果:依据上面2090行分析,执行并回显251行
命令。251 rm -rf .tmp_versions
2103行:call函数、cmd函数分析,cmd_rmfiles 函数:
rm -f $(rm-files)
结果:依据上面2091行分析,执行并回显252行
命令。252 rm -f include/bmp_logo.h include/bmp_logo_data.h tools/version.h boot* u-boot* MLO* SPL System.map fit-dtb.blob* u-boot-ivt.img.log u-boot-dtb.imx.log SPL.log u-boot.imx.log lpc32xx-* bl31.c bl31.elf bl31_*.bin image.map tispl.bin* idbloader.img flash.bin flash.log defconfig keep-syms-lto.c
2104行:在顶层Makefile中显示只有当命令行上中输入
make M=dir
时,KBUILD_EXTMOD=dir,否则KBUILD_EXTMOD为空,由于命令行上没有输入M,所以KBUILD_EXTMOD为空。顶层Makefile中第470行定义RCS_FIND_IGNORE为:470 export RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS -o -name .pc -o -name .hg -o -name .git \) -prune -o
find命令参数 @:
表示不回显 find:
用于查找特定文件或目录的命令(在当前目录下能查找SCCS等 则执行-prune, 否则,就print出来) -name:
查找的名称 -o:
或者 -prune:
忽略一个目录及其之下的文件 -type:
类型【f 表示文件,d 表示目录】 -print:
显示文件名 xargs:
把 find 找出的文件一个一个处理 结果:查找并删除编译后产生的中间文件或目标文件,不回显。
步骤2:2120-2124行,执行依赖 $(mrproper-dirs)
2120 mrproper-dirs := $(addprefix _mrproper_,scripts) 2123 $(mrproper-dirs): 2124 $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
由于addprefix函数、patsubst函数和上面 2099行分析可知,最终展开为:
_mrproper_scripts: make -f ./scripts/Makefile.clean obj=scripts
2124行: /scripts/Makefile.clean分析,
结果:执行并回显253-260行
。253 make -f ./scripts/Makefile.clean obj=scripts 254 make -f ./scripts/Makefile.clean obj=scripts/basic 255 rm -f scripts/basic/fixdep scripts/basic/fixdep 256 make -f ./scripts/Makefile.clean obj=scripts/dtc 257 make -f ./scripts/Makefile.clean obj=scripts/dtc/pylibfdt 258 rm -f scripts/dtc/dtc scripts/dtc/dtc 259 make -f ./scripts/Makefile.clean obj=scripts/kconfig 260 rm -f scripts/kconfig/conf
步骤3:2118-2129行,执行依赖 mrproper
2118 mrproper: rm-dirs := $(wildcard $(MRPROPER_DIRS)) 2119 mrproper: rm-files := $(wildcard $(MRPROPER_FILES)) 2126 mrproper: clean $(mrproper-dirs) 2127 $(call cmd,rmdirs) 2128 $(call cmd,rmfiles) 2129 @rm -f arch/*/include/asm/arch
从上面可以看出,mrproper 依赖
rm-dirs := $(wildcard $(MRPROPER_DIRS))
、rm-files := $(wildcard $(MRPROPER_FILES))
、clean
、$(mrproper-dirs)
2118行:mrproper 依赖
rm-dirs := $(wildcard $(MRPROPER_DIRS))
,没有实现语句,所以这里只需要将依赖展开即可。
$(MRPROPER_DIRS)
在顶层 Makefile 的第2080-2081行中定义,2080 MRPROPER_DIRS += include/config include/generated spl tpl \ 2081 .tmp_objdiff doc/output
wildcard 函数分析,最终展开为:
2091 mrproper : rm-dirs :=include/config include/generated #编译后会产生这两个文件夹 或 2091 mrproper : rm-dirs := #未编译定义的文件夹都不存在
结果:执行并回显
261行
。261 rm -rf include/config include/generated #编译后 或 261 rm -f #未编译
2119行:mrproper 依赖
rm-files := $(wildcard $(MRPROPER_FILES))
,没有实现语句,所以这里只需要将依赖展开即可。
$(MRPROPER_FILES)
在顶层 Makefile 的第2084-2086行中定义,2084 MRPROPER_FILES += .config .config.old include/autoconf.mk* include/config.h \ 2085 ctags etags tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \ 2086 drivers/video/fonts/*.S include/asm
wildcard 函数分析,最终展开为:
2091 mrproper : rm-files :=.config .config.old include/autoconf.mk include/autoconf.mk.dep include/config.h #编译后会产生这些文件 或 2091 mrproper : rm-files := #未编译定义的文件都不存在
结果:执行并回显
262行
。262 rm -f .config .config.old include/autoconf.mk include/autoconf.mk.dep include/config.h #编译后 或 262 rm -f #未编译
2126行:依赖
clean
和$(mrproper-dirs)
分别在步骤1和步骤2中实现。
2127行:同2102行分析一样,由于第2102行已经删去了相应文件夹(不回显),所以这里实际执行的是
rm -rf
2128行:同2103行分析一样,由于第2103行已经删去了相应文件(不回显),所以这里实际执行的是
rm -f
2129行:删除
arch/*/include/asm/arch
(不回显)
步骤4:2135-2142行,实现 distclean
2135 distclean: mrproper 2136 @find $(srctree) $(RCS_FIND_IGNORE) \ 2137 \( -name '*.orig' -o -name '*.rej' -o -name '*~' \ 2138 -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \ 2139 -o -name '.*.rej' -o -name '*%' -o -name 'core' \ 2140 -o -name '*.pyc' \) \ 2141 -type f -print | xargs rm -f 2142 @rm -f boards.cfg CHANGELOG
2135行:依赖
mrproper
在步骤3中实现。
2136行:在顶层Makefile中显示只有当命令行上中输入make M=dir
时,KBUILD_EXTMOD=dir,否则KBUILD_EXTMOD为空,由于命令行上没有输入M,所以KBUILD_EXTMOD为空。顶层Makefile中第470行定义RCS_FIND_IGNORE为:470 export RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS -o -name .pc -o -name .hg -o -name .git \) -prune -o
find命令参数 @:
表示不回显 find:
用于查找特定文件或目录的命令(在当前目录下能查找SCCS等 则执行-prune, 否则,就print出来) -name:
查找的名称 -o:
或者 -prune:
忽略一个目录及其之下的文件 -type:
类型【f 表示文件,d 表示目录】 -print:
显示文件名 xargs:
把 find 找出的文件一个一个处理 结果:查找并删除编译后产生的中间文件或目标文件,不回显。
2142行:删除boards.cfg CHANGELOG
,不回显。