当前位置: 首页 > article >正文

Qt 工程瘦身工具:批量删除 build 目录与 IDE 配置文件

目录一、创作动机二、脚本的作用三、脚本做了什么详细说明3.1 环境准备3.2 扫描与统计3.3 清理当前目录3.4 遍历子目录清理3.5 统计报告四、脚本代码五、逻辑流程六、使用方法七、下载一、创作动机作为一名 Qt/QML 开发者你一定遇到过这样的情况辛辛苦苦写了数十个示例工程目录结构整整齐齐某天想把这些工程打包发出去或者备份到网盘时却发现压缩包大得离谱。仔细一看原来每个工程目录下都残留着build文件夹、CMakeLists.txt.user文件等编译产物。一个小工程可能只有几百 KB 的源码但编译后动辄几十 MB几十个工程加起来就是好几个 GB。如果一开始就做好了统一的编译输出管理比如设置CMAKE_BINARY_DIR指向外部目录自然不会遇到这个问题。但现实往往是项目太多了前期没有规范后期已经来不及逐个修改了。这时候你有几个选择手动删除—— 几十个目录挨个进去删枯燥且容易遗漏。交给 AI 写脚本—— AI 生成的代码不一定可靠万一误删了源码就麻烦了。自己写一个固定的脚本—— 一劳永逸。脚本逻辑确定、行为可控以后每次打包前双击运行即可。这个脚本正是为第三种场景而生的。二、脚本的作用一句话概括递归清除当前目录下所有 Qt/QML 工程的编译产物不动源码一根汗毛。具体清理的目标文件/文件夹目标类型说明build/目录CMake 默认的构建输出目录包含所有 .o、.exe、.a 等编译产物CMakeLists.txt.user文件Qt Creator 的工程配置文件记录了编译选项、断点等 IDE 信息这两个东西是 Qt/QML 工程中最常见的垃圾文件。build目录是体积大户一个 Release 构建动辄几十上百 MB.user文件则因人而异提交到 Git 仓库时通常也会被.gitignore忽略。脚本只会删除上述两类目标其他所有文件 ——.cpp、.qml、.h、CMakeLists.txt、资源文件、图片、文档等 —— 全部原封不动。三、脚本做了什么详细说明脚本的实际行为可以拆解为以下几个层面3.1 环境准备设置UTF-8编码chcp 65001确保中文路径和提示信息正常显示。切换到脚本自身所在的目录cd /d %~dp0无论从哪里双击运行都只清理脚本所在目录下的内容。启用延迟变量扩展EnableDelayedExpansion确保循环中变量值正确更新。3.2 扫描与统计先遍历一级子目录统计工程总数显示进度条时使用。设置三个计数器count已删除数量、errors失败数量、current当前处理序号。3.3 清理当前目录当前目录下如果存在build文件夹删除。当前目录下如果存在CMakeLists.txt.user文件删除。这一步处理的是脚本直接所在目录的情况比如脚本放在所有工程的根目录而根目录本身也是一个 Qt 工程。3.4 遍历子目录清理遍历所有一级子目录对每个目录执行相同的清理逻辑删除子目录/build文件夹删除子目录/CMakeLists.txt.user文件每一步都有成功/失败的状态反馈。3.5 统计报告输出清理统计总工程数、成功删除数、失败数。如果有删除失败的情况通常是权限不足或被其他进程占用给出明确的警告提示。四、脚本代码echo off setlocal EnableDelayedExpansion chcp 65001 nul cd /d %~dp0 echo echo Qt Project Cleanup Tool echo echo Base Directory: %cd% pause echo Start Time: %date% %time% echo. set count0 set errors0 set total_dirs0 set current0 REM Count total directories first for /d %%p in (*) do ( set /a total_dirs1 ) echo Found %total_dirs% project directories echo. echo ---------------------------------------- echo Starting cleanup... echo. REM Clean current directory first set root_has_items0 echo [ROOT] Processing current directory if exist build ( rd /s /q build 2nul if errorlevel 1 ( echo [FAILED] build set /a errors1 ) else ( echo [DELETED] build set /a count1 set root_has_items1 ) ) if exist CMakeLists.txt.user ( del /f /q CMakeLists.txt.user 2nul if errorlevel 1 ( echo [FAILED] CMakeLists.txt.user set /a errors1 ) else ( echo [DELETED] CMakeLists.txt.user set /a count1 set root_has_items1 ) ) if !root_has_items!0 ( echo [NO ITEMS] ) echo. REM Clean subdirectories for /d %%p in (*) do ( set /a current1 echo [!current!/%total_dirs%] Processing: %%p set has_deleted0 if exist %%p\build ( rd /s /q %%p\build 2nul if errorlevel 1 ( echo [FAILED] %%p\build set /a errors1 ) else ( echo [DELETED] %%p\build set /a count1 set has_deleted1 ) ) if exist %%p\CMakeLists.txt.user ( del /f /q %%p\CMakeLists.txt.user 2nul if errorlevel 1 ( echo [FAILED] %%p\CMakeLists.txt.user set /a errors1 ) else ( echo [DELETED] %%p\CMakeLists.txt.user set /a count1 set has_deleted1 ) ) if !has_deleted!0 ( echo [NO ITEMS] ) echo. ) echo ---------------------------------------- echo Cleanup Complete! echo. echo Statistics echo Total Projects: %total_dirs% echo Deleted: %count% items echo Failed: %errors% items echo End Time: %date% %time% echo echo. if %errors% gtr 0 ( echo [WARNING] %errors% items failed to delete. Check permissions. echo. ) echo Press Enter to exit... pause endlocal五、逻辑流程整个脚本的执行流程如下关键设计决策不递归进入子目录的子目录只处理一级子目录。这是有意为之的因为 Qt 工程通常是一级目录一个工程深层嵌套会大幅增加风险和复杂度。如果确实需要更深层级的清理可以手动调整或运行多次。存在性检查优先于删除先if exist再执行删除避免对不存在的路径误操作。逐条反馈不留盲区每一条删除操作都有明确的状态输出用户随时可以检查日志确认没有误删。失败不中断某个文件/目录删除失败不会中断整个流程而是记录错误数并在最后统一报告。六、使用方法运行效果将cleanup_projects.bat复制到你的 Qt 工程集合的根目录下。双击运行或者从命令行执行。等待脚本执行完毕确认统计信息无误。按 Enter 退出此时编译文件已被清空。个人建议放在所有工程的父目录运行而不是每个工程里放一个。配合.gitignore使用在仓库中忽略build/和*.user文件从根本上避免这类文件被提交。对于未来新建的 Qt 工程建议统一设置CMAKE_BINARY_DIR到外部路径从根源上避免编译产物散落在源码目录中。七、下载脚本下载链接https://gitcode.com/u011186532/qml_demo/blob/main/cleanup_projects.bat无需额外依赖Windows 系统原生支持。本脚本专为 Qt/QML 工程开发适用于 Windows 平台。用于其他类型的 CMake 工程也可能有效但请先确认清理目标是否合适。

相关文章:

Qt 工程瘦身工具:批量删除 build 目录与 IDE 配置文件

目录一、创作动机二、脚本的作用三、脚本做了什么(详细说明)3.1 环境准备3.2 扫描与统计3.3 清理当前目录3.4 遍历子目录清理3.5 统计报告四、脚本代码五、逻辑流程六、使用方法七、下载一、创作动机 作为一名 Qt/QML 开发者,你一定遇到过这…...

人该怎样活着呢?版本70.9

人该怎样活着呢?版本70.9 A思考现实问题并记录自己的灵感 。【生活的指南针】 (20250212) a1如何思考? 思考相似联想因果联想灵感(20251226)相似联想:比如看到苹果想到牛顿在树下被苹果砸…...

Arm Neoverse V3AE调试寄存器DBGWCR0_EL1与DBGBVR1_EL1详解

1. Arm Neoverse V3AE调试寄存器深度解析 在Arm架构的调试系统中,调试寄存器扮演着至关重要的角色。作为一位长期从事Arm架构底层开发的工程师,我经常需要与DBGWCR0_EL1和DBGBVR1_EL1这类调试寄存器打交道。这些寄存器不仅仅是简单的控制位集合&#xff…...

Xbox成就解锁器终极指南:免费工具3步解锁全成就

Xbox成就解锁器终极指南:免费工具3步解锁全成就 【免费下载链接】Xbox-Achievement-Unlocker Achievement unlocker for xbox games (barely works but it does) 项目地址: https://gitcode.com/gh_mirrors/xb/Xbox-Achievement-Unlocker 还在为Xbox游戏中那…...

你的代码仓库变成“毛线团”了?Monorepo 用 Turborepo 拆成“乐高积木”

你维护着五六个项目,每个都单独开一个 Git 仓库。改一个公共组件,要挨个进每个项目,复制粘贴,提交,发布。一上午就没了。今天我们来学 Monorepo——用 Turborepo 把多个项目放进同一个仓库,共享代码、统一构…...

终极免费Flash反编译工具:JPEXS Free Flash Decompiler全新指南

终极免费Flash反编译工具:JPEXS Free Flash Decompiler全新指南 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 你是否曾面对过这些困境?那些曾经精彩的Flash动画…...

基于FastAPI与MCP协议构建多服务AI工具集成平台

1. 项目概述与核心价值最近在折腾AI助手和代码编辑器集成的时候,发现一个挺有意思的需求:如何让Claude、Cursor或者Windsurf这类工具,能直接调用外部的天气、新闻、汇率这些实时数据?总不能每次都手动查了再复制粘贴吧。传统的做法…...

Clawtick CLI:统一命令行工具入口,提升开发运维效率

1. 项目概述:一个命令行里的“瑞士军刀”如果你和我一样,每天的工作都离不开终端,那肯定对命令行工具(CLI)又爱又恨。爱的是它的高效、直接和可编程性,恨的是不同工具之间五花八门的命令、参数和配置方式&a…...

终极指南:3分钟让你的PS4手柄在Windows上完美运行

终极指南:3分钟让你的PS4手柄在Windows上完美运行 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 想让你的PS4手柄在Windows电脑上获得原生级的游戏体验吗?DS4Wind…...

IDEA卡在‘Resolving dependencies’?别急着重启,先试试这5个Maven/Gradle配置检查

IDEA卡在‘Resolving dependencies’?别急着重启,先试试这5个Maven/Gradle配置检查 每次看到IDEA底部进度条卡在"Resolving dependencies"时,那种焦躁感就像等快递显示"正在派送"却迟迟不到。大多数开发者会条件反射地点…...

除了上CDN,Unity微信小游戏包体优化还有这些“骚操作”:从插件源码到资源管理

突破20M限制:Unity微信小游戏深度包体优化实战指南 当Unity开发者将作品移植到微信小游戏平台时,20M的包体限制往往成为第一道技术门槛。这个看似简单的数字背后,实际上考验的是开发者对引擎机制、资源管理和平台特性的综合把控能力。本文将带…...

Cursor编辑器配置同步方案:基于Git与Shell脚本实现开发环境无缝漫游

1. 项目概述:一个为 Cursor 编辑器量身定制的配置同步方案如果你和我一样,是一个重度依赖 Cursor 这款“AI 原生”代码编辑器的开发者,那你一定遇到过这个痛点:辛辛苦苦在办公室的电脑上配置好了顺手的主题、快捷键、代码片段、AI…...

从实验室到工作站:手把手配置Ubuntu 20.04+CUDA 11.1开发环境,兼顾V100与3090混搭显卡

异构GPU集群实战:Ubuntu 20.04下V100与3090的CUDA 11.1协同配置指南 当实验室的计算节点同时搭载NVIDIA V100和RTX 3090显卡时,驱动安装会面临Volta与Ampere架构的版本兼容挑战。去年我们在部署某AI训练平台时,就遇到过驱动版本冲突导致3090无…...

打造高效心流体验:氛围感编码环境配置全攻略

1. 项目概述:一个为“氛围感编码”而生的资源宝库如果你和我一样,是个对工作环境、工具美学和流程仪式感有点“挑剔”的程序员,那么看到acvnace/awesome-vibe-coding-resources这个项目标题,大概率会会心一笑。这绝不是一个简单的…...

轻量化研究代理:基于Agent架构的自动化信息处理方案

1. 项目概述:轻量化研究代理的诞生背景与核心价值在信息爆炸的时代,无论是学术研究者、行业分析师,还是产品经理、内容创作者,都面临着一个共同的痛点:如何从海量的、碎片化的信息中,高效地筛选、整合、提炼…...

从《九章算术》到Python:手把手复现古人开方算法(附完整代码)

从《九章算术》到Python:手把手复现古人开方算法(附完整代码) 数学史与编程的碰撞总能擦出令人惊喜的火花。当我们在Python中敲下math.sqrt(2)时,很少有人会想到这个简单的函数背后,是两千多年来人类智慧的结晶。本文将…...

ViGEmBus内核级游戏控制器模拟:架构解析与高级故障排除方案

ViGEmBus内核级游戏控制器模拟:架构解析与高级故障排除方案 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 在游戏开发、输入设备测试和远程游戏…...

终极视频加速工具:5大技巧让你每天多出2小时的高效观看体验

终极视频加速工具:5大技巧让你每天多出2小时的高效观看体验 【免费下载链接】videospeed HTML5 video speed controller (for Google Chrome) 项目地址: https://gitcode.com/gh_mirrors/vi/videospeed 你是否经常觉得视频内容太慢,但又不想错过关…...

GTA5线上小助手:免费开源的游戏增强工具,让你的洛圣都冒险更轻松

GTA5线上小助手:免费开源的游戏增强工具,让你的洛圣都冒险更轻松 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools 想要在《侠盗猎车手5》线上模式中获得更流畅的游戏体验吗&#…...

DeepSeek-TUI 终端智能交互实战指南

在终端里敲命令是开发者的日常,但面对复杂的管道组合、记不住的参数选项,或是深夜排查故障时急需一条精准的查询语句,我们常常不得不中断思路去搜索文档。这种上下文切换不仅打断心流,更降低了效率。如果终端本身就能理解自然语言…...

Atom编辑器中文汉化实战指南:告别英文困扰,打造专属中文编程环境

Atom编辑器中文汉化实战指南:告别英文困扰,打造专属中文编程环境 【免费下载链接】atom-simplified-chinese-menu Atom 的简体中文汉化扩展,目前最全的汉化包。包含菜单汉化、右键菜单汉化以及设置汉化 项目地址: https://gitcode.com/gh_mirrors/at/a…...

抖音下载神器:douyin-downloader免费批量下载工具完整教程

抖音下载神器:douyin-downloader免费批量下载工具完整教程 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback s…...

别再折腾了!手把手教你搞定Fluent UDF编译环境(附VS安装避坑指南)

从零构建Fluent UDF编译环境:Visual Studio深度配置与避坑实战 当你在深夜第三次重装Visual Studio,盯着屏幕上那个顽固的"Error: The UDF library you are trying to load is not compiled"提示时,可能已经怀疑人生。这不是你的问…...

如何高效实现小说资源自动化采集:Rust开源方案深度解析

如何高效实现小说资源自动化采集:Rust开源方案深度解析 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 番茄小说下载器(Tomato-Novel-Downloader&#…...

如何用JPEXS Free Flash Decompiler拯救你的Flash资源:5分钟快速上手指南

如何用JPEXS Free Flash Decompiler拯救你的Flash资源:5分钟快速上手指南 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 你是否曾经为找不到Flash动画中的素材而烦恼&#…...

如何快速实现网易云音乐自动打卡:每天300首轻松冲级LV10的完整指南

如何快速实现网易云音乐自动打卡:每天300首轻松冲级LV10的完整指南 【免费下载链接】neteasy_music_sign 网易云自动听歌打卡签到300首升级,直冲LV10 项目地址: https://gitcode.com/gh_mirrors/ne/neteasy_music_sign 你是否也曾为了提升网易云音…...

从视频中智能提取PPT:3分钟快速生成PDF的终极指南

从视频中智能提取PPT:3分钟快速生成PDF的终极指南 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 你是否曾经需要从教学视频、会议录像或在线课程中提取PPT内容&#xff…...

QtScrcpy核心技术深度解析:从零构建跨平台Android投屏控制框架

QtScrcpy核心技术深度解析:从零构建跨平台Android投屏控制框架 【免费下载链接】QtScrcpy Android real-time display control software 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy 在移动设备管理领域,实时投屏控制已成为开发者…...

ComfyUI-Manager终极指南:5个简单方法彻底解决节点冲突问题

ComfyUI-Manager终极指南:5个简单方法彻底解决节点冲突问题 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various …...

MySQL 8.0.46​ 与 MySQL 9.7.0在sql语句方面的区别并举例说明

系统对比 MySQL 8.0.46​ 与 MySQL 9.7.0,并结合 Java 场景给出可运行的示例说明。(不涉及 JDBC 驱动、连接方式等前置内容,只谈 SQL 本身)一、总体结论先行(SQL 层面)对比维度MySQL 8.0.46MySQL 9.7.0JSON…...