一、作用
distclean是指清理Makefile生成的中间文件以及目标文件,包括生成的动态库和静态库等。通常使用make distclean命令将代码目录还原到干净的状态,方便进行下一次编译。
distclean是整个清理规则中最严格、最全面的,几乎可以把所有的编译生成物全部删除。
distclean实际上是clean和mrproper的结合体,它不但清理已生成的二进制文件和中间编译文件,还会清除软件生成的配置文件,以及一些可能会改变编译结果的文件。
二、翻译
'clean'是干净的意思,'dist'代表distribution,即发布版本。所以distclean就是将发布版本还原到编译前的干净状态。
三、指令
使用distclean指令时需要注意的是,它会将除原始代码外所有文件都删除,包括可执行文件、obj文件以及库文件等。为确保安全,很多程序在执行distclean指令时会出现提示,要求用户手动确认。
四、由来
distclean最早出现在Unix的make工具中,主要作用是用来删除编译过程中生成的文件以及编译出错后的文件。后来,随着软件发布的需求增加,distclean逐渐演变成了清理整个代码目录的通用规则。如今,distclean已经成为了许多开源软件项目清理的必备规则,包括Linux内核、Python等。
五、使用例子
以CMake为例:
cmake_minimum_required(VERSION 2.6) project(test) add_executable(test main.c) # 添加distclean指令 add_custom_target(distclean COMMAND ${CMAKE_BUILD_TOOL} clean COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/clean-all.cmake ) # 清理脚本 file(WRITE ${CMAKE_SOURCE_DIR}/clean-all.cmake " # 清理编译生成的文件 file(REMOVE \${CMAKE_BINARY_DIR}/CMakeCache.txt) file(REMOVE \${CMAKE_BINARY_DIR}/Makefile) file(REMOVE \${CMAKE_BINARY_DIR}/cmake_install.cmake) file(REMOVE \${CMAKE_BINARY_DIR}/CMakeFiles) # 清除生成的结果文件 file(GLOB_RECURSE files_to_remove \${CMAKE_BINARY_DIR}/ facit-* *.nav *.aux *.toc *.out *.log *.blg *.bbl *.dvi *.pdf ) if(files_to_remove) message(\"Distclean running: removing generated results\") file(REMOVE \${files_to_remove}) endif() # 清理生成的测试文件 file(REMOVE \${CMAKE_BINARY_DIR}/testoutput_*.txt) " )
上述CMakeLists.txt中定义了一个名为distclean的自定义指令,它主要执行以下操作:
- 清理编译生成的文件(CMakeCache.txt、Makefile、cmake_install.cmake、CMakeFiles)
- 清除编译过程中生成的结果文件(facit-*、.nav、.aux、.toc、.out、.log、.blg、.bbl、.dvi、.pdf)
- 清除生成的测试输出文件(testoutput_*.txt)
执行make distclean指令时,会按照上述规则进行清理,确保代码目录干净,除非重新编译,否则不会有残留文件。
六、总结
distclean作为清理规则之王,不仅广泛运用于开源软件项目的编译和部署中,也给我们的编程工作带来了很大的方便。不过,要注意在使用distclean指令时,一定要谨慎操作,否则可能会导致数据丢失甚至系统崩溃。