网上说的
度娘第一篇,openwrt下make clean、dirclean、distclean的区别,描述到:
- make clean 清除了bin目录
- make dirclean 是clean+清除交叉编译链工具以及工具链目录
- make distclean 是清除所有相关的东西,包括下载的软件包、配置文件、feed内容等。
我的理解
最准确的解释就是直接找到Makefile中相关内容:
clean: FORCE
rm -rf $(BUILD_DIR) $(BIN_DIR) $(BUILD_LOG_DIR)
dirclean: clean
rm -rf $(STAGING_DIR) $(STAGING_DIR_HOST) $(STAGING_DIR_TOOLCHAIN) $(TOOLCHAIN_DIR) $(BUILD_DIR_HOST) $(BUILD_DIR_TOOLCHAIN)
rm -rf $(TMP_DIR)
增加一点测试代码:
test:
@echo "BUILD_DIR:" $(BUILD_DIR)
@echo "BIN_DIR:" $(BIN_DIR)
@echo "BUILD_LOG_DIR:" $(BUILD_LOG_DIR)
clean: FORCE
rm -rf $(BUILD_DIR) $(BIN_DIR) $(BUILD_LOG_DIR)
dirclean: clean
rm -rf $(STAGING_DIR) $(STAGING_DIR_HOST) $(STAGING_DIR_TOOLCHAIN) $(TOOLCHAIN_DIR) $(BUILD_DIR_HOST) $(BUILD_DIR_TOOLCHAIN)
rm -rf $(TMP_DIR)
dirtest:
@echo "STAGING_DIR:" $(STAGING_DIR)
@echo "STAGING_DIR_HOST:" $(STAGING_DIR_HOST)
@echo "STAGING_DIR_TOOLCHAIN:" $(STAGING_DIR_TOOLCHAIN)
@echo "TOOLCHAIN_DIR:" $(TOOLCHAIN_DIR)
@echo "BUILD_DIR_HOST:" $(BUILD_DIR_HOST)
@echo "BUILD_DIR_TOOLCHAIN:" $(BUILD_DIR_TOOLCHAIN)
@echo "TMP_DIR:" $(TMP_DIR)
测试情况如下:
root@APPUbuntu:openwrt-trunk# make V=s test
make[1]: Entering directory `/home/code/openwrt-trunk'
BUILD_DIR: /home/code/openwrt-trunk/build_dir/target-mips_34kc_uClibc-0.9.33.2
BIN_DIR: /home/code/openwrt-trunk/bin/ar71xx
BUILD_LOG_DIR: /home/code/openwrt-trunk/logs
make[1]: Leaving directory `/home/code/openwrt-trunk'
root@APPUbuntu:openwrt-trunk#
root@APPUbuntu:openwrt-trunk#
root@APPUbuntu:openwrt-trunk# make V=s dirtest
make[1]: Entering directory `/home/code/openwrt-trunk'
STAGING_DIR: /home/code/openwrt-trunk/staging_dir/target-mips_34kc_uClibc-0.9.33.2
STAGING_DIR_HOST: /home/code/openwrt-trunk/staging_dir/host
STAGING_DIR_TOOLCHAIN:
TOOLCHAIN_DIR: /home/code/openwrt-trunk/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2
BUILD_DIR_HOST: /home/code/openwrt-trunk/build_dir/host
BUILD_DIR_TOOLCHAIN: /home/code/openwrt-trunk/build_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2
TMP_DIR: /home/code/openwrt-trunk/tmp
make[1]: Leaving directory `/home/code/openwrt-trunk'
root@APPUbuntu:openwrt-trunk#
可以看到:
+make clean: 清除了如下几个目录:
- /home/code/openwrt-trunk/build_dir/target-mips_34kc_uClibc-0.9.33.2
- /home/code/openwrt-trunk/bin/ar71xx
- /home/code/openwrt-trunk/logs
+make dirclean:除了clean清除的内容外,还清除了如下几个目录:
- /home/code/openwrt-trunk/staging_dir/target-mips_34kc_uClibc-0.9.33.2
- /home/code/openwrt-trunk/staging_dir/host
- /home/code/openwrt-trunk/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2
- /home/code/openwrt-trunk/build_dir/host
- /home/code/openwrt-trunk/build_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2
- /home/code/openwrt-trunk/tmp
所以我理解:
- make clean 清除了目标机器上可以运行的bin文件以及目录,还有中间的过程文件和编译日志,即make clean之后make,目标机上的内容会全部被重新编译,但是不会引起menuconfig的内容丢失。
- make dirclean 在clean的基础上,清除了交叉编译工具链、menuconfig的内容。
- make distclean 是清除所有相关的东西,包括编译的和下载的内容等,这个要慎之又慎。
从倒序的角度来看,也可以说明openwrt的编译过程:
- 下载
- 配置、交叉编译环境的搭建
- 编译