一、作用
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指令時,一定要謹慎操作,否則可能會導致數據丟失甚至系統崩潰。
原創文章,作者:WEYX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/147550.html