一、作用
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指令时,一定要谨慎操作,否则可能会导致数据丢失甚至系统崩溃。