Qt Creator报CMake无C编译器路径?十分钟排查与根治指南
做 Qt 开发的人几乎都撞见过这条警告CMake configuration has no path to a C compiler set, even though the kit has a valid tool... 我第一次看到整个人是懵的Kit 面板里清清楚楚写着编译器路径MinGW 的 g 就躺在指定位置为什么 CMake 偏偏说“没有路径”盲目重试了好几次 Configure错误纹丝不动最后只能老老实实去查资料、翻缓存日志才把这事的来龙去脉彻底弄明白。这条警告不是告诉你“编译器丢了”而是告诉你“编译器的地址没有传导到 CMake 这一层”。Qt Creator 的 Kit 配置和 CMake 的缓存配置是两套独立的东西只要中间断了就会出现这种“Kit 里看得出编译器存在、CMake 却两手空空”的局面。这篇文章就把这条警告掰开揉碎它怎么来的、十分钟怎么定位、哪些坑最容易踩、修复之后怎么预防再犯。无论你是刚入门 CMake 工程的新手还是被这个报错烦了好几次的老手照着下面的路径走一遍基本都能收工。1. 这条警告到底在说什么1.1 Kit 与 CMake 的两层配置关系Qt Creator 里创建一个 CMake 工程你会接触到两个概念“Kit”和“CMake 配置”。很多人把这两者当成一回事其实它们是分离的。Kit 是 Qt Creator 自己的概念它把你用的编译器比如 MinGW 的 gcc/g或者 MSVC 的 cl.exe、Qt 版本、调试器、CMake 工具、以及目标架构打包成一个组合。每次你新建项目选择 Kit实际上是在告诉 Creator“我要用这组工具链来构建。”Creator 会探测编译器是否存在、版本是多少所以 Kit 面板里能显示绿色的“可用”状态。CMake 那边则是完全独立的一套逻辑。它靠的是CMakeCache.txt里的缓存变量来决定用哪个编译器比如CMAKE_C_COMPILER和CMAKE_CXX_COMPILER。CMake 在第一次 Configure 的时候会去探测编译器如果探测不到或者探测失败它就会在缓存里留下一个空值于是你在 CMake 界面里看到编译器那一栏是空的或者显示默认值。问题就出在这里Kit 的探测不等于 CMake 的探测。Qt Creator 知道编译器在哪不代表 CMake 也天然知道。中间只要有一环没接通CMake 就会给你来一句“no path to a C compiler set”。1.2 为什么警告文案里要特意提“valid tool”你注意看这句话的原文结构“even though the kit has a valid tool...”。Qt Creator 其实很贴心它发现了一个矛盾Kit 里明明有有效的工具链但 CMake 那边没配上。这句话本质上是 Creator 在替你排查出了一个“两层脱节”的可疑点它不直接报错而是给你一个提示让你去检查 CMake 配置。实际表现为两种第一种Configure 阶段就报错CMake 直接说找不到编译器构建根本跑不起来第二种Configure 能过但 CMake 界面里编译器栏显示为空的或默认值构建到一半出现诡异错误。无论哪种根源大多都在编译器路径没有正确传入 CMake。所以说看到这条警告不用慌先把心态放平这不是你的代码问题是工程配置问题。只要把编译器路径接上后面一切都会正常。2. 十分钟定位流程从界面到缓存逐层排查2.1 检查 Kit 的编译器探测状态排查第一步先从 Qt Creator 的 Kit 下手。打开“编辑”菜单下的“偏好设置”切到 Kits 页面找到你当前项目用的那个 Kit。看编译器那栏是否显示正常路径如果显示红色警告或者路径已失效说明 Creator 自己都没探测到编译器那 CMake 那边自然更不可能正常。常见情况有两种一是编译器路径失效比如 MinGW 装好后移动过目录或者 Qt 在线安装包升级后旧路径被覆盖Creator 缓存里还留着旧地址二是 Kit 创建时选错了编译器类型比如 Kit 是 MSVC 的却指到了 MinGW 的 g 上。如果是路径失效直接点编译器下拉栏旁边的“管理”按钮重新添加正确的编译器路径再回到 Kit 里重新选择。操作完之后一定要重新运行一次 CMake 配置而不是直接 Build因为缓存里的旧值不会自动更新。2.2 检查 CMake 配置面板和 CMakeCache.txt如果 Kit 看起来没问题那就看 CMake 配置页面。在项目侧边栏选择你的工程切到 Projects 页找到 Build SettingsCMake 分类下面会显示当前配置参数。重点看两行CMAKE_C_COMPILER和CMAKE_CXX_COMPILER。像我遇到过的情况这俩值显示的是空字符串或者显示成了类似CMAKE_C_COMPILER-NOTFOUND的内容。前者说明缓存里没有写编译器路径后者说明 CMake 探测过但没找到。不管哪种都可以继续往深层查。构建目录下有个CMakeCache.txt用文本编辑器打开直接搜CMAKE_C_COMPILER你能看到缓存里实际存了什么。如果看到NOTFOUND那就是 CMake 在探测阶段失败了而不是你没配置。想了解更多探测失败的细节看构建目录下的CMakeFiles/CMakeError.log和CMakeOutput.log。这两个文件记录了 CMake 尝试编译测试程序的所有输出是定位问题最直接的证据来源。2.3 检查 PATH 与环境变量排查到这里有一个很容易被忽略的点PATH 环境变量。Qt Creator 在调用 CMake 的时候虽然理论上 CMake 可以接收编译器绝对路径但很多情况下CMake 的编译器探测依赖系统环境尤其是在用 Ninja、MinGW Makefiles 这类生成器时。如果 MinGW 的 bin 目录没有加到 PATHCMake 在查找工具链时就会碰壁。把编译器所在目录加进系统 PATH比如 MinGW 就是...\Tools\mingw\binMSVC 则更复杂一些它需要 VS 的开发环境变量。加完 PATH 后关掉 Qt Creator 再重新打开只有重启程序才会重新加载系统环境变量然后再 Configure 一次。MSVC 有个特殊之处MSVC 的编译器路径不是简单的 exe 路径而是一套环境脚本体系Qt Creator 通常会自动帮你加载。如果你常年用命令行可能已经习惯手动调用 vcvarsQt Creator 不加载这些也会导致 CMake 探测失败尤其是当你通过系统环境指定了某些变量时更容易乱套。2.4 清掉 build 目录重新 Configure很多时候问题根本不是当前配置有问题而是历史包袱太重。之前用另外一个 Kit 配置过同一个构建目录CMakeCache.txt 里残留了旧的编译器路径你切到新 Kit 之后CMake 因为缓存命中根本不去重新探测直接把旧值读出来用。于是你的 Kit 是新的、CMake 工具是新的缓存却还是旧世界的。解决方案特别朴素把构建目录整个删除重新新建一个 build 目录再 Configure。这里有个经验不要只删文件直接把整个 build 文件夹删干净因为 CMake 的缓存文件散落在多处只删一部分容易残留元数据导致新的 Configure 还是老毛病。我在实际项目里遇到过一种情况切编译器时忘了清缓存结果 CMake 把 MinGW 和 MSVC 的变量混在一起链库的时候报一堆莫名其妙的错误。后来养成习惯凡是切换 Kit 或换编译器必建一个新的 build 目录彻底隔离省心得多。3. 高频诱因与硬核解法3.1 CMake 版本太老导致探测不了编译器有一次我遇到一个很隐蔽的情况警告内容完全一样但编译器路径新鲜得很Kit 也一切正常PATH 也没问题。最后发现是 CMake 版本太老老到什么程度呢老到它根本不认识新编译器输出的一些格式特征探测程序一跑就直接失败于是缓存里写NOTFOUND。Qt 项目里这种问题尤其常见。新版 Qt 可能要求 CMake 3.16 以上而你系统里装的是 3.10。Qt Creator 默认会找系统 CMake如果你用的 Qt 安装包没有附带新的 CMake系统 CMake 又被老版本占据这个坑就很容易踩中。解法很简单给工程指定新版本的 CMake。Qt Creator 的 Kit 页面里CMake 一栏可以单独指定 CMake 可执行文件路径。我建议直接下载一个较新的 CMake把它的路径填进 Kit而不是依赖系统里不知猴年马月的版本。填完之后重新 Configure基本就能解决。也可以顺手用命令行验证一下跑cmake --version看看版本号如果太低就果断换。3.2 编译器位数和 Qt 库架构不匹配这个坑更经典而且它产生的警告文案就是你这句话。你分别装过 32 位和 64 位的 Qt 库或者系统里同时存在多个 MinGW 版本然后 Kit 里 Qt 版本选的是 64 位编译器却指向了 32 位的 g或者反过来。Qt Creator 自己不太会拦你它照样显示“Kit 有效”因为编译器本身确实存在、能运行。但 CMake 在探测架构时发现不对劲就宁愿不写编译器路径也不肯盲目继续。这种架构不匹配问题光看警告看不出端倪得去点击 CMake 配置页面里的“详情”或者翻 CMakeError.log里面通常会有明显的位数标识。排查时我习惯先确认自己需要的是 x86 还是 x64再把 Qt 库版本、编译器、以及 PATH 里的工具链三者对齐。三处必须一致缺一不可。确认之后删掉编译目录重新 Configure。注意如果 PATH 里同时存在多个 MinGW 的 bin 目录顺序也很重要前面的优先级高可能影响最终选中的编译器版本。如果出现这种混乱把不用的工具链从 PATH 里清理掉。3.3 路径里夹杂中文、空格和特殊符号Windows 上做 Qt 开发工程的存放路径、编译器路径、Qt 安装路径如果出现中文或空格很容易引发 CMake 探测失败。MinGW 的 Makefiles 对路径解析尤其敏感空格会让生成的 makefile 把路径拆裂。我见过一个真实场景某开发者把 Qt 装在了带中文名的用户目录下编译时编译器明明存在但每次 Configure 都报找不到路径。这不是 CMake 不认识绝对路径而是生成器里嵌套了一层转义之后路径就失效了。解决办法很粗暴把所有相关路径改成纯英文不带空格老老实实规范命名。比如把 Qt 装在C:\Qt这种简单路径工程也放在根目录下某个英文文件夹里。注意这里说的“路径”包括系统临时目录、用户名目录只要和用户名粘连了Windows 就喜欢给你制造惊喜。改完路径后不仅重配 CMake最好把环境变量也检查一遍避免残留旧值。3.4 手动指定编译器的最后手段如果上面所有方法都试过警告还是顽固地存在那就用最终手段手动往 CMake 配置参数里塞编译器路径。在 Projects 的 Build Settings 里CMake Configuration 处可以追加参数。写入下面两行-DCMAKE_C_COMPILERC:/path/to/gcc.exe -DCMAKE_CXX_COMPILERC:/path/to/g.exeMSVC 的话则写成-DCMAKE_C_COMPILERC:/path/to/cl.exe -DCMAKE_CXX_COMPILERC:/path/to/cl.exe加了这两行之后重新 ConfigureCMake 会绕过自己的探测逻辑直接用你给的路径。这个方法的优点是稳缺点是要注意架构匹配而且之后如果想换成别的编译器得先把这两行从缓存里清掉否则 CMake 一直优先用旧值。这个方法还有一个变体写一个 CMake 工具链文件用-DCMAKE_TOOLCHAIN_FILExxx.cmake指定。它适合交叉编译场景比如在 Windows 上编 ARM 的目标或者给嵌入式平台构建 Qt。工具链文件里除了编译器路径还可以指定 flags、查找路径比单纯指定编译器更好管理。4. 实战记录一次完整故障排查实录4.1 现象还原之前有朋友对接一个跨平台项目人在 Windows 上用 Qt 6Kit 是 MinGW 64 位CMake 是跟随 Qt 安装目录自带的 3.21。他打开项目第一次 Configure 就弹出了那句话“CMake configuration has no path to a C compiler set, even though the kit has a valid tool...” 他先点了重新 Configure没用又把 Kit 切到另外一个 MinGW 变体重新 Configure还是没用一怒之下把 build 目录删了再次 Configure问题依旧。我接到问题时第一反应就是检查他的 Kit 实际指向。打开 Kits 页面一看编译器的路径确实存在但指向的目录里压根没有 g.exe。也就是说Creator 的缓存还停留在安装时的快照那个版本的 MinGW 后来被覆盖了路径早就失效。于是“Kit 有效工具链”这个判断本身就已经失真了。4.2 排查过程我先把路径失效的问题修掉在编译器管理里重新添加新的 MinGW 路径更新 Kit 指向然后关掉 Qt Creator 重新打开。顺手确认了 CMake 工具指向的是 Qt 自带的 CMake而不是系统里那个老版本。再次打开工程Configure警告还在但这次 CMakeCache.txt 里显示CMAKE_C_COMPILER-NOTFOUND部分变成了空值说明探测程序依然失败。继续翻 CMakeError.log我发现测试项目编译时报错说找不到cstdlib这是典型的 MinGW 内部头文件路径没配对。继续追查发现这个 MinGW 的 include 目录结构和编译器版本配置错位是安装时残留了一个损坏的组件。把损坏的 MinGW 卸载重新装了一个干净版本确保 bin 目录加入 PATH同时把原先的 Qt 路径也理顺。再次打开 Qt Creator重新 Configure警告消失了编译器栏正确显示 g 路径构建顺利通过。前后折腾了大半个小时但真正的修复点其实就两个编译器路径失效 编译器组件损坏。4.3 修复之后的验证修完之后我没急着交付而是做了一套完整的验证流程新建一个干净的 build 目录重新 Configure确认编译器路径出现在 CMakeCache.txt 中然后构建一个最简单的 hello world 工程跑一把确认生成的可执行文件能正常启动。最后又做了一次“切换 Kit 再切回”的测试确认缓存不会污染下一次配置。这个小项目给我留下的教训很深看到这条警告先查 Creator 的编译器探测结果再查 CMake 缓存最后查工具链本身的健康状态。很多人在第一步就陷入盲目重试的恶性循环纯粹是在浪费时间。5. 速查表与防患于未然的习惯5.1 常见问题速查表现象特征大概率原因优先解法Kit 里编译器路径标红或无效编译器被移动/覆盖重新探测并添加编译器CMakeCache 里显示 NOTFOUNDCMake 探测程序失败查看 CMakeError.log 定位根因多编译器混用后出现警告缓存残留旧编译器值删除 build 目录重新 ConfigurePATH 里多个编译器共存工具链顺序冲突清理 PATH只留需要的目录每次 Configure 稳定复现CMake 版本过老给 Kit 指定新版 CMake 路径工程路径含中文/空格生成器路径解析失败迁移到纯英文路径架构位数对不上Qt/编译器位数不一致统一 x86 或 x64检查三处一致这张表我贴在项目笔记里好几年了每次同事报这个问题我基本都是按表格逐行排查很少失手。5.2 几个减少踩雷的工作习惯第一个习惯切换 Kit 或换编译器时永远新建 build 目录。不要迷信“重新 Configure 会自己清理旧缓存”CMake 的缓存机制决定了它更喜欢复用旧值而不是推翻重来。第二个习惯编译器路径和 Qt 路径尽量用绝对路径少用带变量的软链接。Qt Creator 里配置 Kit 时编译器选绝对路径会少很多环境层面的意外。第三个习惯定期清理系统中过期的编译器残留。Windows 上卸载不干净是常态多个 MinGW 版本并存时极易出现“路径存在但工具链损坏”的假象。第四个习惯升级 Qt 大版本时顺手把 CMake 也一起升级。Qt 5 工程切 Qt 6CMake 还是老版本这类组合最容易触发各种探测问题。还有一个容易被忽略的公司电脑的安全软件可能拦截 CMake 的编译器探测测试。如果你排查完所有步骤CMakeError.log 里连一点输出都没有怀疑一下杀毒软件把测试程序给拦了也不是没道理。我实际见过这种案例最后是在安全软件的白名单里加了编译目录才过关。6. 最后分享一个很少人知道的细节前面说了这么多排查方法我再补充一个冷门但实用的细节。Qt Creator 在调用 CMake 之前生成的配置参数里会有一个CMAKE_PREFIX_PATH指到 Qt 安装目录。有时候编译器探测失败不是因为你没配置编译器而是 CMake 在找 Qt 依赖时把整个 Configure 流程搞崩了导致编译器变量根本没来得及写入。这种情况最典型的表现是警告出现了但 CMakeError.log 里没有任何编译器相关的错误。解决办法就是在 CMake 配置参数里手动把CMAKE_PREFIX_PATH指到最新的 Qt 目录。如果 Qt 路径变了而缓存里还是旧路径那就会出现这种“看似编译器问题、其实是 Qt 路径问题”的干扰项。我在实际维护一个老项目时踩过一次这个坑当时查了一下午最后发现把构建目录删掉、同时显式指定CMAKE_PREFIX_PATH才彻底解决。所以如果你发现这条警告怎么都清不掉记得回头看一眼 Qt 路径是否正确传入了 CMake。很多时候真正的病根其实藏在你看不见的缓存里。希望能帮你少折腾几个小时顺利把构建跑起来。

相关新闻

ChromaDB可视化插件实战:高维向量降维与RAG检索调试

ChromaDB可视化插件实战:高维向量降维与RAG检索调试

给ChromaDB做可视化插件这件事,最初听起来有点像给仓库装个监控摄像头——总觉得"没必要吧,我知道里面放了什么"。但等真正开始调RAG应用、排查检索质量的时候,你就发现没有可视化,你连"里面放了什么"都说不清…

2026/10/13 12:36:55 阅读更多 →
目录结构与文件类型:从工程化约定到可维护性的落地指南

目录结构与文件类型:从工程化约定到可维护性的落地指南

很多人看起来每天都在和文件名打交道,但真到一个从零起步的项目里,目录怎么分、文件怎么放,反而成了最容易让人抓狂的问题之一。“目录结构和文件类型”这个话题看起来基础,实际上背后藏着一整套工程化约定,直接影响项…

2026/10/13 13:16:35 阅读更多 →
基于Spring Boot的苏蔚家校互联管理系统设计与实现

基于Spring Boot的苏蔚家校互联管理系统设计与实现

1. 项目背景与功能定位 1.1 为什么做“苏蔚家校互联管理系统” 这个题目挂在毕业设计选题列表里的时候,我第一反应是这又是一个“标准化”的管理系统,无非是增删改查换了一层壳。但真正动手之后发现,家校互联这个场景比想象中要复杂不少——…

2026/10/13 13:16:41 阅读更多 →

最新新闻

React脚手架原理与选型指南:从Vite到工程化落地

React脚手架原理与选型指南:从Vite到工程化落地

聊到React项目的起步阶段,脚手架这几个字几乎每次都会被摆上台面。它不是一个简单的配置文件,而是把一整套前端工程化底座直接端到你面前:开发服务器、热更新、构建打包、代码规范、环境变量管理,这些原本要折腾一周的事情&#x…

2026/10/13 21:58:43 阅读更多 →
Agent Skill实战指南:从零构建可复用的AI助手能力模块

Agent Skill实战指南:从零构建可复用的AI助手能力模块

1. 从"每次都要重新教"说起:Agent Skill到底在解决什么如果你用过任何一款AI助手,大概率经历过这样的场景:你花十分钟跟它解释"帮我整理会议纪要时,要按项目分组,每个项目下列出待办事项、负责人和截止…

2026/10/13 21:58:43 阅读更多 →
React脚手架深度解析:从CRA到Vite的工程化进阶与踩坑指南

React脚手架深度解析:从CRA到Vite的工程化进阶与踩坑指南

做前端的,几乎没人能绕开脚手架上手这道坎。最近带了个新人,第一天问他环境起来没有,他说“起好了,但不知道起好了啥”。这个回答其实特别真实,因为现在跑一条npx create-react-app my-app,几十秒后一个能跑…

2026/10/13 21:58:43 阅读更多 →
基于Spring Boot的交通事故档案管理系统设计与实现

基于Spring Boot的交通事故档案管理系统设计与实现

1. 项目定位与整体架构设计拆解1.1 为什么选Java Springboot做档案管理系统先聊点实在的。很多同学做毕业设计,第一反应是选个看起来“高级”的技术栈,比如Python的Django、Flask,或者Node.js的Express。但我个人见过太多案例,最…

2026/10/13 21:58:43 阅读更多 →
英语学习真的需要思考:从机械记忆到深度认知的进阶方法

英语学习真的需要思考:从机械记忆到深度认知的进阶方法

我们先说句实话:我见过太多人把英语学成了“体力活”。单词书翻烂了三本,语法题刷了上千道,朗读打卡坚持了一年,结果遇到老外还是张不开嘴,读文章还是逐字翻译。问题出在哪?不是不努力,而是努力…

2026/10/13 21:58:43 阅读更多 →
从AtCoder一题看浮点数精度陷阱与整数解法

从AtCoder一题看浮点数精度陷阱与整数解法

做题时间长了以后,我越来越确信一件事:真正让人当场翻车的,往往不是那些看半天都没思路的难题,而是所有步骤都“看起来没问题”的简单题。AtCoder Beginner Contest 169 的 C 题 Multiplication 3,就是一个摆在台面上的…

2026/10/13 21:57:43 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →