Ladybird 浏览器:Qt Creator 项目配置实战——从工程导入到 clang-format 自动格式化
【免费下载链接】ladybirdTruly independent web browser项目地址: https://gitcode.com/GitHub_Trending/la/ladybird
本文基于 Ladybird 官方文档 QtCreatorConfiguration.md,系统讲解如何把 Ladybird 这个以 CMake 管理的大型 C++ 浏览器工程导入 Qt Creator 并配置为可日常开发的工作区:包括通过Import Existing Project重建文件清单、编辑.config/.cxxflags/.includes三个工程文件、用 Beautifier 插件接入项目级.clang-format规则,以及配置输入lic即可插入版权声明的 License 模板。读完本文,你可以在 Qt Creator 中获得与 Ladybird 代码风格一致的补全、跳转与自动格式化能力。
一、前置条件:先确保命令行构建链路可用
在配置 Qt Creator 之前,文档明确要求:先拥有一个可用的工具链,并且能够用命令行完成 Ladybird 的构建与运行。构建步骤请参考 BuildInstructionsLadybird.md。
原因很直接:后文要向工程里添加Build/release/等生成目录作为头文件搜索路径,这些目录只有在真正执行过一次 CMake 构建之后才存在;同时 Ladybird 依赖 vcpkg 管理的第三方库(如 Skia),其头文件位于构建目录下,只有完成构建,IDE 的索引与跳转才有意义。
Qt Creator 本身不需要安装整套 Qt SDK——从 Qt 官网下载离线安装器后,在组件列表左侧只勾选 "Qt Creator" 即可,这只是一步纯 IDE 的安装,不引入额外的 Qt 框架依赖。
二、导入工程:Import Existing Project 与文件清单重建
按官方文档的操作序列,在 Qt Creator 中完成导入:
- 打开 Qt Creator,选择
File -> New File or Project...; - 选择
Import Existing Project; - 给工程起一个名字(注意:部分工具默认假设小写的
ladybird),并将目录定位到你的 Ladybird 仓库检出根目录,点击 Next; - 等待文件列表生成,可能需要一两分钟;
- 忽略 Qt Creator 自动生成的文件列表——它并不完整,后文会覆盖;
- 将
Add to version control设为<None>,点击 Finish。
2.1 为什么要手动重新生成 ladybird.files
导入完成后,官方要求回到 shell 中进入 Ladybird 工程目录,执行 refresh-ladybird-qtcreator.sh 脚本来重新生成根目录下的ladybird.files清单文件,并且此后每次删除或新增文件都要重新执行一次。
阅读该脚本源码可以理解它做了什么:
find . \( \ -name Base \ -o -name Patches \ -o -name Ports \ -o -name Root \ -o -name Build \ \) -prune \ -o \( \ -name '*.ipc' \ -o -name '*.cpp' \ -o -name '*.idl' \ -o -name '*.c' \ -o -name '*.h' \ -o -name '*.in' \ -o -name '*.css' \ -o -name '*.cmake' \ -o -name '*.json' \ -o -name 'CMakeLists.txt' \ \) \ -print > ladybird.files find Build/release/ \( \ -name '*.cpp' \ -o -name '*.idl' \ -o -name '*.h' \ \) \ -print >> ladybird.files从源码结构看,脚本分两段工作:
- 第一段
find遍历仓库(未设置LADYBIRD_SOURCE_DIR时用git rev-parse --show-toplevel自动定位),剪枝跳过Base、Patches、Ports、Root、Build这几个与开发无关或体积巨大的目录,只收录源码相关的扩展名——*.ipc、*.cpp、*.idl、*.c、*.h、*.in、*.css、*.cmake、*.json和CMakeLists.txt; - 第二段
find专门把Build/release/下的生成文件(*.cpp、*.idl、*.h)追加到清单末尾。Ladybird 通过 CMake 代码生成器(例如从.idl/.ipc定义生成的 C++ 代码)产出大量源文件,这些文件是 IDE 补全和跳转所必需的,因此单独追加。
注意清单中特意包含了*.ipc与*.idl——这两类是 Ladybird 的接口/IPC 定义文件,后续还会在自动格式化一节中专门处理。
2.2 编辑 ladybird.config:加入编译期格式检查宏
用 Qt Creator 的跨文件搜索打开ladybird.config(快捷键 ^K,macOS 上为 CMD+K,输入文件名后回车即可打开),在其中追加:
#define ENABLE_COMPILETIME_FORMAT_CHECK该宏作用于 Ladybird 的格式化库 AK/Format.h:Ladybird 的fmt::format/DebugStringf等格式化接口支持在编译期对格式串与参数类型做一致性检查,开启此宏后,格式化字符串写错(占位符与参数类型不匹配)会在编译阶段直接报错,而不是留到运行时才暴露。在 IDE 的日常开发中提前打开它,能显著减少此类低级错误。
2.3 编辑 ladybird.cxxflags:对齐项目的编译标准
将ladybird.cxxflags的内容改为:
-std=c++23 -fsigned-char -fconcepts -fno-exceptions -fno-semantic-interposition -fPIC这些是 Ladybird 实际构建所使用的关键编译选项,让 IDE 的语义分析与真实构建保持一致:
-std=c++23:Ladybird 是 C++23 工程;-fsigned-char:规定char默认有符号,保证跨平台行为一致;-fconcepts:启用 C++20/23 的 concepts 语法(GCC 的显式开关);-fno-exceptions:整个工程不使用异常,错误处理走Error/Result等显式类型(可参考 AK/Error.h、AK/Result.h);-fno-semantic-interposition:禁止语义插桩,保证内联与链接行为可预期;-fPIC:生成位置无关代码。
2.4 编辑 ladybird.includes:补齐头文件搜索路径
将ladybird.includes改为如下内容(Skia 路径需按你本地Build/release/vcpkg_installed的实际架构目录调整):
./ Libraries/ Services/ Build/release/ Build/release/Libraries/ Build/release/Services/ Build/release/vcpkg_installed/x64-linux/include/skia/ AK/各路径的用途:
Libraries/、Services/、AK/:Ladybird 的三大源码区——基础库(Libraries/LibCore、Libraries/LibWeb等)、多进程服务(Services/RequestServer、Services/WebContent等)以及基础工具库AK(字符串、容器、格式化等);Build/release/及其子目录:放置 CMake 代码生成器输出的头文件/源码,IDE 索引这些生成物是跨模块跳转的前提;Build/release/vcpkg_installed/x64-linux/include/skia/:vcpkg 拉取的 Skia 2D 图形库头文件,供 LibGfx 等渲染相关代码补全使用。
2.5 收尾:处理 UTF-8 BOM
最后,在 Qt Creator 的选项中搜索 "BOM"(路径:Text Editor > Behavior > File Encodings > UTF-8 BOM),把行为切换为 "Always delete"(始终删除 BOM),避免保存时给源文件注入 BOM 污染 Ladybird 的代码库。
至此 Qt Creator 的工程配置完成,可以开始浏览工程、修改代码了。
三、自动格式化:接入项目级 .clang-format 规则
Ladybird 的低层代码风格(空格、括号、大括号位置等)统一由仓库根目录的 .clang-format 定义,整体规则参见 CodingStyle.md。在配置自动化之前,文档特别提醒:先确认你本地的 clang-format 版本与项目要求一致,因为部分操作系统默认携带的版本不同。
从源码看,CI 强制的版本由 Meta/Linters/lint_clang_format.py 决定:
CLANG_FORMAT_MAJOR_VERSION = 21即 clang-format21。如果发行版自带的版本太旧,需要单独安装新版,相关方法见 AdvancedBuildInstructions.md 中 "clang-format updates" 一节。
.clang-format本身以BasedOnStyle: WebKit为基底并做了大量定制(AlignTrailingComments: Always、AfterFunction: true的大括号换行、IndentPPDirectives: AfterHash、RemoveSemicolon: true等),文件末尾还带有一段Language: ObjC的独立配置段,用于 macOS 上的.mm源文件。
3.1 启用 Beautifier 插件并注入自定义规则
按文档步骤在 Qt Creator 中配置:
- 菜单
Help > About Plugins...; - 找到
Beautifier (experimental)一行(在搜索框输入beau可以快速定位); - 勾选其复选框;如被提示,重启 Qt Creator;
- 菜单
Tools > Options...; - 在搜索框输入 "beau",进入
Beautifier > Clang Format; - 选择 "customized" 风格,点击 "edit";
- 把
.clang-format文件的完整内容粘贴进 "value" 框,点击 "OK"; - 切到
Beautifier > General页,勾选 "Enable auto format on file save"; - 确认工具选中的是 "ClangFormat",点击 "OK"。
文档还给出两条务实的注意事项:
- Ladybird 并非整个代码库都已通过 clang-format 清理,因此保存文件时偶尔会出现大面积 diff。作者建议自行判断:只有几行的话直接带上没问题;如果整文件都被重排,更好的做法是单独提交一次格式化,或者直接忽略这些格式改动。可以顺便学习
git add -p(按块暂存)与git checkout -p(按块回退)的用法; - IPC 定义文件会被误格式化:Qt Creator 倾向把
.ipc文件当作 C++ 头文件并尝试格式化,这没有意义。解决办法是告诉 Qt Creator 这些文件是纯文本:- 菜单
Tools > Options...; - 搜索框输入 "beau",进入
Environment > MIME Types; - 在小的搜索框中输入 "plain",选中
text/plain; - 在 "details" 区可见 Patterns 列表(形如
*.txt;*.asc;*,v),将其扩展为*.txt;*.asc;*,v;*.ipc;*.gml; - 点击 "OK" 关闭对话框;
- 可能需要把已打开的 IPC 文件关掉再重新打开。验证方式:右键编辑器页签中的文件名,选择 "Properties...",第三行应显示
MIME type: text/plain。
- 菜单
四、License 模板:输入 lic 自动插入版权声明
Ladybird 的源码文件统一以如下版权头开头:
/* * Copyright (c) 2024-present, the Ladybird developers. * * SPDX-License-Identifier: BSD-2-Clause */文档演示的用法是:新建任意位置的一个文件(例如license-template.creator),把上面的标准许可证模板写入其中,然后在 Qt Creator 中:
- 打开菜单
Tools->Options,找到C++区域; - 切到 "File Naming" 标签页(文档作者吐槽了一句"不要问它为什么在这里");
- 页面底部有 "License template:" 选项,点击 "Browse…" 选中刚才的
license-template.creator文件; - 点击 "OK" 完成配置。
配置完成后,在 C++ 文件开头输入lic即可自动展开出完整的版权声明,配合第三节的保存时自动格式化,新文件从版权头到代码风格都与 Ladybird 代码库保持一致。
五、小结
本文覆盖的完整工作流可以归纳为四步:
- 导入:
Import Existing Project导入仓库根目录,用 Meta/refresh-ladybird-qtcreator.sh 重建ladybird.files(新增/删除文件后需重跑); - 三文件对齐:
ladybird.config加ENABLE_COMPILETIME_FORMAT_CHECK,ladybird.cxxflags设为-std=c++23 -fsigned-char -fconcepts -fno-exceptions -fno-semantic-interposition -fPIC,ladybird.includes列出源码区、Build/release生成目录与 Skia 头文件路径; - 格式化:确认 clang-format 21 后,用 Beautifier 插件注入根目录
.clang-format规则,开启保存时自动格式化,并把*.ipc、*.gml归入text/plain以免被误格式化; - 版权头:通过 C++ > File Naming 的 License template 配置
lic快捷模板。
这套配置让 Qt Creator 的索引、补全与格式化行为与 Ladybird 的 CMake 构建和 CI 风格检查(Meta/Linters/lint_clang_format.py)保持一致;其他编辑器(VS Code、CLion、Neovim 等)的配置可参考同目录下的 EditorConfiguration 系列文档。
【免费下载链接】ladybirdTruly independent web browser项目地址: https://gitcode.com/GitHub_Trending/la/ladybird
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考