C++/Qt项目静态代码分析:clang-tidy核心功能与Qt Creator集成实战
1. 项目概述为什么我们需要clang-tidy在C和Qt开发这条路上摸爬滚打了十几年我越来越觉得写代码就像盖房子而调试和优化则是给房子做“体检”和“精装修”。早期我们更多依赖运行时调试器比如GDB或Qt Creator内置的调试器来抓“活虫”但有些问题比如代码风格不一致、潜在的逻辑漏洞、性能上的坏味道在程序跑起来之前就已经埋下了。这些问题静态代码分析工具就是最好的“X光机”。clang-tidy正是这样一款基于LLVM/Clang的、功能强大的C/C静态分析工具。它不是简单的语法检查而是能深入理解你的代码语义找出那些符合语法但可能有问题、不优雅、或不安全的代码模式。对于Qt项目来说它更是如虎添翼因为它内置了对Qt框架特定代码模式的支持。想象一下你写了一个QObject派生类却忘了写Q_OBJECT宏或者错误地使用了字符串连接clang-tidy都能在你编译之前就发出警告。这不仅仅是让代码更“好看”更是提升代码健壮性、可维护性以及团队协作效率的关键一步。很多开发者尤其是从其他语言转过来的可能会觉得C的编译警告已经够多了何必再引入一个额外的工具我的经验是编译器警告主要关注语言标准的符合性和明显的错误而clang-tidy的关注点更高一层代码质量、现代C特性C11/14/17/20的最佳实践、常见陷阱、以及可读性。它能帮你提前发现那些在特定条件下才会触发的悬空指针、资源泄漏或者建议你将老式的for循环改为基于范围的for循环。在大型Qt项目中这种提前发现问题的能力能节省大量的调试时间。2. clang-tidy核心能力与在Qt环境中的价值解析2.1 clang-tidy的核心检查类别clang-tidy的检查项check是其灵魂它们被组织成多个类别覆盖了代码质量的方方面面。理解这些类别能帮助我们有针对性地使用它。代码可读性与风格readability-* 这是最基础也是见效最快的一类。它检查命名规范、冗余的代码、过长的函数、复杂的表达式等。例如readability-braces-around-statements会检查是否所有语句都加了花括号这对避免“悬空else”问题很有帮助readability-magic-numbers会警告你代码中直接出现的魔数未命名的常量建议用有意义的常量或枚举替代。对于团队协作强制统一这类风格能极大减少代码审查时的摩擦。现代C最佳实践modernize-* 这是推动项目向现代C迁移的利器。它会建议你将NULL换成nullptr将typedef换成using将手动资源管理new/delete替换为智能指针将老式循环替换为基于范围的for循环或者使用auto来简化类型声明。启用这类检查就像请了一位与时俱进的代码教练不断提醒你使用更安全、更简洁的语法特性。性能优化performance-* 这类检查专注于发现可能影响性能的代码模式。例如performance-for-range-copy会警告你在基于范围的for循环中无意中拷贝了容器元素应该使用const auto或autoperformance-move-const-arg会检查是否在应该使用移动语义的地方错误地对常量参数进行了std::move。在Qt中它还能检查一些与容器如QList、QVector使用相关的低效模式。错误预防与安全性bugprone-, cert-, cppcoreguidelines-* 这是clang-tidy的“硬核”部分。bugprone-*系列专门捕捉常见的编程错误模式比如整数除零风险、错误的宏使用、可能的空指针解引用等。cert-*和cppcoreguidelines-*则分别基于SEI CERT C安全编码标准和C Core Guidelines提供工业级的安全性和可靠性建议。对于金融、嵌入式等对稳定性要求极高的领域这类检查不可或缺。Qt特定检查qt-* 这是clang-tidy对Qt开发者的特别馈赠。它理解Qt的元对象系统、内存管理规则和惯用法。例如qt-qstring-arg 检查QString的arg()方法调用顺序是否正确避免因占位符数量不匹配导致的运行时错误或错误输出。qt-deprecated-api 警告你使用了Qt中已被弃用的类或函数帮助你保持代码与未来版本的兼容性。qt-missing-qobject-macro 检查从QObject派生的类是否声明了Q_OBJECT宏没有这个宏信号槽、属性系统都将无法工作。qt-assert 检查Qt的断言使用如Q_ASSERT确保其合理性。2.2 在Qt项目中的独特价值在纯C项目中使用clang-tidy已经收益颇丰但在Qt项目中它的价值被进一步放大。首先Qt的信号槽机制和元对象系统是强大的但也容易引入隐蔽的错误。比如信号槽连接时字符串形式的签名SIGNAL()/SLOT()如果拼写错误只能在运行时通过qDebug输出连接失败的信息才能发现。虽然Qt5推荐使用函数指针语法但遗留代码或某些动态场景下仍会用到字符串形式。clang-tidy的Qt检查项能在编译期就帮你排查这类问题。其次Qt有一套自己的内存管理和对象树模型。QObject及其子类在父对象销毁时会自动销毁子对象这不同于标准的C RAII。clang-tidy能识别出可能违反这一模型的代码比如将栈上对象具有自动存储期设置为另一个对象的子对象这会导致双重释放的灾难性后果。再者Qt提供了大量便利的容器和字符串类如QString, QList。不当使用这些类可能导致不必要的内存分配和拷贝。clang-tidy的性能类检查和Qt特定检查能指出这些问题例如建议使用QStringLiteral而非QLatin1String或普通字符串字面量来创建编译期字符串以提升运行时效率。注意 启用所有检查项--checks*可能会产生大量警告其中一些可能不符合你项目的实际情况或编码规范。建议从最重要的几类开始如bugprone-*,modernize-*,qt-*或者根据.clang-tidy配置文件进行精细化的定制。3. 集成clang-tidy到Qt Creator与CMake项目实战理论说再多不如动手配置一遍。下面我将以Qt Creator作为IDECMake作为构建系统详细讲解如何无缝集成clang-tidy。3.1 环境准备与clang-tidy安装首先确保你的系统上安装了足够新版本的LLVM/Clang工具链。在Ubuntu/Debian上你可以使用apt安装sudo apt-get install clang-tidy clang-tools在Windows上可以通过官方LLVM安装程序或MSYS2等包管理器安装。安装后在终端输入clang-tidy --version确认安装成功。Qt Creator需要知道clang-tidy的路径。通常安装后会自动加入系统PATH如果没有你需要在Qt Creator中配置。3.2 为CMake项目启用clang-tidy这是最推荐的方式因为配置一次所有使用该CMake项目的开发者以及CI/CD系统都能自动应用相同的检查规则。在你的项目根目录的CMakeLists.txt文件中添加以下代码。我建议放在project()命令之后add_executable或add_library之前。# 查找clang-tidy程序 find_program(CLANG_TIDY_EXE NAMES clang-tidy) if(CLANG_TIDY_EXE) message(STATUS clang-tidy found: ${CLANG_TIDY_EXE}) # 设置全局C编译选项启用clang-tidy set(CMAKE_CXX_CLANG_TIDY ${CLANG_TIDY_EXE}) # 你可以在这里添加额外的clang-tidy选项但更推荐使用.clang-tidy文件 # set(CMAKE_CXX_CLANG_TIDY ${CLANG_TIDY_EXE};-checks*) else() message(STATUS clang-tidy not found. Static analysis disabled.) endif()这段代码的作用是在配置阶段寻找clang-tidy可执行文件如果找到则将其路径赋值给CMake变量CMAKE_CXX_CLANG_TIDY。CMake在生成构建系统如Makefile或Ninja文件时会自动为每个C源文件的编译命令添加clang-tidy调用。关键点 这种集成方式下clang-tidy的分析是作为编译过程的一部分进行的。当你执行make或ninja构建命令时编译器在编译每个文件后clang-tidy会紧接着对其进行分析并输出警告/错误。这确保了分析与编译使用完全相同的宏定义、包含路径等上下文信息结果最准确。3.3 创建并配置.clang-tidy文件在项目根目录与CMakeLists.txt同级创建一个名为.clang-tidy的YAML格式配置文件。这是控制clang-tidy行为的核心。# .clang-tidy 配置文件示例 Checks: -*, qt-*, bugprone-*, modernize-*, performance-*, readability-*, clang-analyzer-*, -bugprone-branch-clone, -modernize-use-trailing-return-type, -readability-identifier-length WarningsAsErrors: HeaderFilterRegex: AnalyzeTemporaryDtors: false FormatStyle: none CheckOptions: - key: modernize-use-nullptr.NullMacros value: NULL - key: qt-qstring-arg.temporary value: 1配置详解Checks: 这是最重要的选项。-*,表示先禁用所有检查然后按需启用我们关心的类别。这里我们启用了qt-*所有Qt检查、bugprone-*除bug、modernize-*现代化、performance-*性能、readability-*可读性和clang-analyzer-*Clang静态分析器。接着我们用-前缀排除了个别我们不想启用的具体检查例如-bugprone-branch-clone有时会误报-modernize-use-trailing-return-type可能不习惯尾置返回类型-readability-identifier-length对变量名长度要求可能太严格。CheckOptions: 用于微调特定检查的行为。例如modernize-use-nullptr.NullMacros告诉工具哪些宏应该被视为NULL以便替换为nullptr。qt-qstring-arg.temporary设置为1会对临时字符串使用arg()发出警告这通常是低效的。HeaderFilterRegex: 可以设置为一个正则表达式只分析匹配的头文件。对于大型项目可以先专注于分析.cpp文件将此选项留空或设置为.*。3.4 在Qt Creator中配置与使用配置好CMake后在Qt Creator中打开项目并执行以下步骤Kit选择 确保你的构建套件Kit使用的是支持clang-tidy的CMake生成器如Ninja或Unix Makefiles。构建 像往常一样点击“构建”按钮。此时在“编译输出”面板中你不仅会看到编译器的输出还会看到大量来自clang-tidy的警告信息。这些警告会以清晰的格式显示包括文件、行号、警告等级和具体描述。问题导航 所有clang-tidy发出的警告都会自动集成到Qt Creator的“问题”面板Alt6中。你可以像处理编译错误一样双击警告项快速跳转到对应的代码行。快速修复 Qt Creator对许多clang-tidy警告提供了“快速修复”功能。将光标放在有警告的代码行上按AltEnter或点击左侧的灯泡图标会弹出可用的修复建议。例如对于“use nullptr”警告可以直接选择“Replace with nullptr”一键修复。实操心得 初次在大型项目上启用clang-tidy警告数量可能会非常惊人让人望而却步。我的策略是“分而治之”首先在.clang-tidy中只启用qt-*和bugprone-*这类高价值、高风险检查。修复完这些问题后再逐步启用modernize-*和performance-*。对于readability-*可以和团队讨论挑选大家公认重要的规则启用。切忌一开始就追求“零警告”那会严重拖慢开发进度。4. 高级用法自定义检查与CI/CD集成4.1 编写自定义clang-tidy检查进阶虽然clang-tidy内置了数百个检查但每个团队或项目都有自己独特的编码规范或需要防范的特定模式。这时你可以编写自定义检查。这需要一定的Clang/LLVM AST抽象语法树知识。简单来说你需要创建一个新的Clang插件项目。编写一个继承自clang::tidy::ClangTidyCheck的类。重写registerMatchers方法使用Clang的AST Matcher API来匹配你感兴趣的代码模式。重写check方法对匹配到的节点发出诊断信息。例如如果你想禁止在项目中使用某个特定的、已被废弃的API可以编写一个匹配器来查找对该函数或类的调用然后报错。由于这个过程相对复杂通常只在大型团队或对代码质量有极高要求的场景下使用。LLVM官方有详细的教程和示例。4.2 与持续集成/持续部署CI/CD流程集成将clang-tidy集成到CI/CD管道中是保证代码质量不随时间和人员变动而退化的关键。你可以在CI脚本中在编译步骤之后或作为独立步骤运行clang-tidy。一种常见的做法是使用run-clang-tidy脚本通常随clang-tidy一起安装或可通过pip install clang-tidy获得。它可以并行地对整个代码库运行分析并生成易于阅读的报告如HTML或SARIF格式。在你的CI配置文件如.gitlab-ci.yml或.github/workflows/build.yml中添加一个类似下面的步骤clang-tidy-analysis: stage: test script: # 1. 生成compile_commands.jsonCMake需设置-DCMAKE_EXPORT_COMPILE_COMMANDSON # 2. 运行clang-tidy - find . -name *.cpp -o -name *.cxx -o -name *.cc -o -name *.c | xargs run-clang-tidy -p ./build # 或者指定检查项和输出格式 - run-clang-tidy -p ./build -checksqt-*,bugprone-* -format-stylefile clang-tidy-report.txt artifacts: paths: - clang-tidy-report.txt expire_in: 1 week你可以设置CI任务的成功条件例如不允许出现error级别的诊断信息或者警告数量不能超过某个阈值。这样任何提交的代码如果引入了新的、严重的静态分析问题CI就会失败从而阻止其合并到主分支。4.3 处理第三方库和生成的代码在分析项目时你通常不希望clang-tidy去分析第三方库如Boost, Qt自身的源码或由工具自动生成的代码如MOC生成的moc_*.cpp文件UI编译器生成的ui_*.h文件。这会产生大量无关且无法修复的警告干扰对自身代码的分析。有几种方法可以排除这些文件在.clang-tidy中使用HeaderFilterRegex 通过精细的正则表达式只匹配你自己项目的源代码路径。在CMake中针对目标属性设置 对于引入的第三方库目标可以将其CXX_CLANG_TIDY属性设置为空字符串。set_target_properties(ThirdPartyLib PROPERTIES CXX_CLANG_TIDY )使用run-clang-tidy时指定文件列表 手动构造需要分析的文件列表排除第三方目录。5. 常见问题排查与效能提升技巧即使正确配置在使用clang-tidy过程中也可能遇到各种问题。下面是我在实践中总结的一些常见坑点及其解决方案。5.1 常见错误与警告解读问题现象可能原因解决方案clang-tidy命令未找到未安装或不在PATH中。确认安装并在Qt Creator的构建套件设置或CMake的find_program中指定完整路径。分析结果与编译环境不一致clang-tidy使用的包含路径、宏定义与实际编译时不同。务必使用compile_commands.json。在CMake中设置-DCMAKE_EXPORT_COMPILE_COMMANDSON生成该文件并用-p参数指定其所在目录给clang-tidy。这是保证分析准确性的黄金法则。对Qt宏如signals,slots报语法错误clang-tidy默认不知道这些Qt特有的宏。确保clang-tidy能获取到Qt的头文件路径和定义了这些宏的编译选项如-DQT_CORE_LIB。通过compile_commands.json可以自动解决。误报太多特别是风格相关警告启用了过于严格或不适合项目的检查项。在.clang-tidy配置文件中精细调整Checks列表禁用那些与团队规范冲突或产生大量噪音的检查如readability-*中的某些项。不要追求100%的检查覆盖率追求对项目有价值的警告覆盖率。分析速度慢对大型项目一次性分析所有文件。1. 使用run-clang-tidy的-j参数进行并行分析。2. 在CI中可以只分析本次提交修改的文件git diff。3. 在本地开发时可以配置Qt Creator只在保存文件时对当前文件运行clang-tidy在代码编辑器的ClangCodeModel设置中。无法自动修复Quick Fix不可用某些复杂的重构需要跨文件修改或Qt Creator的Clang插件版本不匹配。对于简单的检查如modernize-use-autoclang-tidy本身提供了-fix参数可以自动修复。可以在终端运行clang-tidy -p build/ -checksmodernize-use-auto -fix yourfile.cpp。对于不可自动修复的手动修改是唯一途径。5.2 提升团队采纳度的技巧引入新工具总会遇到阻力尤其是像静态分析工具这种会“挑刺”的工具。要让团队欣然接受clang-tidy我有几个建议循序渐进由点及面 不要一开始就在整个项目、所有检查项上铺开。选择一个新启动的、规模较小的模块或子项目作为试点。只启用最关键的几类检查如bugprone-*,qt-*。让大家先看到它“抓虫”的能力而不是被风格警告淹没。将修复作为代码审查的一部分 在团队工作流中规定提交代码前必须处理完clang-tidy产生的警告至少是error级别的。可以把“无新增clang-tidy警告”作为代码合并的一项准入条件。善用“忽略”注释 对于极少数误报或者因为某些特殊原因必须保留的、不符合规则的代码可以使用NOLINT注释来让clang-tidy忽略特定行的警告。// 忽略这一行的特定检查 oldFunction(); // NOLINT // 忽略这一行的所有检查 legacyCode(); // NOLINT(*) // 忽略下一行的特定检查 // NOLINTNEXTLINE(bugprone-switch-missing-default-case) switch(value) { case 1: break; }但要严格限制这种注释的使用防止滥用导致工具失效。定期回顾与优化规则集 每隔一段时间如每个季度和团队一起回顾.clang-tidy配置文件。讨论哪些检查项带来了实际价值哪些产生了过多噪音且修复成本高于收益据此调整规则集。让静态分析规则成为团队共识的、活的标准。我个人在实际项目中的体会是坚持使用clang-tidy就像坚持代码评审一样短期看似乎增加了工作量但长期来看它极大地减少了调试时间提升了代码的可读性和一致性让新成员更快地理解和遵循项目规范。它不是一个“警察”而是一个时刻在线的、不知疲倦的“结对编程伙伴”。当你习惯了它的存在并看着代码库在它的帮助下变得越来越整洁、健壮时你会觉得这一切的投入都是值得的。最后一个小技巧可以将clang-tidy与clang-format代码格式化工具结合使用在保存文件时自动格式化和快速修复让代码质量维护变得几乎无感。

相关新闻

Claude Code系统提示词精简策略:80%长度削减与质量提升实战

Claude Code系统提示词精简策略:80%长度削减与质量提升实战

最近在优化 AI 助手的使用体验时,发现系统提示词(System Prompt)的复杂度直接影响着模型的理解效率和响应质量。特别是在使用 Claude Code 这类代码生成工具时,冗长的系统提示词不仅占用大量 token,还会干扰核心指令的…

2026/10/9 20:11:13 阅读更多 →
企业官网响应式开发:如何用Bootstrap在30分钟内搭建专业级网站?

企业官网响应式开发:如何用Bootstrap在30分钟内搭建专业级网站?

企业官网响应式开发:如何用Bootstrap在30分钟内搭建专业级网站? 【免费下载链接】bootstrap The most popular HTML, CSS, and JavaScript framework for developing responsive, mobile first projects on the web. 项目地址: https://gitcode.com/Gi…

2026/10/1 8:44:54 阅读更多 →
3步搞定数据质量监控:DataHub元数据平台的实战指南

3步搞定数据质量监控:DataHub元数据平台的实战指南

3步搞定数据质量监控:DataHub元数据平台的实战指南 【免费下载链接】datahub The Context Platform for your Data and AI Stack 项目地址: https://gitcode.com/GitHub_Trending/da/datahub 想象一下这样的场景:你正在准备一份重要的业务报告&am…

2026/10/4 0:32:47 阅读更多 →

最新新闻

云开发+短信API:零成本搭建员工生日自动提醒系统

云开发+短信API:零成本搭建员工生日自动提醒系统

每年一到员工生日这种日子,行政和HR就开始手忙脚乱。翻Excel、找手机号、挨个发祝福语,还要赶在当天发出,稍微一忙就会漏掉一两个。之前我们团队就是这么干的,直到有一次连续漏了三个同事的生日,被吐槽“公司没有人情味…

2026/10/15 20:02:24 阅读更多 →
Arcpy批量导出地图脚本:从手动出图到自动化流水线

Arcpy批量导出地图脚本:从手动出图到自动化流水线

1. 从手动一张张出图到批量流水线:这个脚本到底解决什么问题如果你做过GIS制图,大概率经历过这样的场景:手头有一份行政区划图层,领导要求按每个乡镇出一张专题图,一共几十上百个。打开ArcMap或ArcGIS Pro,…

2026/10/15 20:02:24 阅读更多 →
离散数学笔记高效整理法:五大板块与复习避坑指南

离散数学笔记高效整理法:五大板块与复习避坑指南

简介:这是一份系统梳理离散数学核心知识点的PDF笔记,围绕数理逻辑、集合论、数论、计数原理、概率论、关系论、代数系统与图论八大板块展开,适合高校本科生、考研复习者及程序员巩固理论基础。笔记从命题逻辑的永真式与范式讲起,依…

2026/10/15 20:02:24 阅读更多 →
python代码学习1

python代码学习1

摘要:f的用法、print中可用的操作、for、列表、ASCII编码一、f的用法:在输出里调整格式1.直接嵌入变量/表达式a 18 print(f"今年{a}岁") # 今年18岁2.保留有效数字pi 3.1415926 print(f"{pi:.2f}") # 3.14 print(f"{pi…

2026/10/15 20:02:24 阅读更多 →
IIS 6.0离线安装包:含全部DLL与注册表修复的SP2兼容部署方案

IIS 6.0离线安装包:含全部DLL与注册表修复的SP2兼容部署方案

简介:本资源为IIS 6.0完整安装支持包,面向Windows Server 2003系统管理员、传统Web运维人员及遗留系统维护开发者,专为解决IIS 6.0原生安装因缺失关键DLL导致失败或功能异常的典型问题。压缩包内含263个文件,涵盖19个核心DLL&…

2026/10/15 20:02:24 阅读更多 →
VMware复制粘贴失效?从VMware Tools到客户机隔离全排查指南

VMware复制粘贴失效?从VMware Tools到客户机隔离全排查指南

你是不是也遇到过这样的场景:虚拟机里装好了系统,想在宿主机和虚拟机之间复制一段代码、一个下载链接、一小段配置,结果CtrlC、CtrlV按了半天一点反应都没有;换成拖放文件,鼠标倒是能移过去,文件却死活拖不…

2026/10/15 20:01:22 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →