拓冰建站拓冰建站
首页 / 资讯中心 / 正文

NotepadNext 如何按文档步骤升级 thirdparty 中的 Scintilla 依赖

NotepadNext 如何按文档步骤升级 thirdparty 中的 Scintilla 依赖【免费下载链接】NotepadNextA cross-platform, reimplementation of Notepad项目地址: https://gitcode.com/GitHub_Trending/no/NotepadNextNotepadNext 把 Scintilla 以源码形式内嵌在thirdparty/scintilla目录中随项目一起构建。当需要使用新版 Scintilla例如获取修复或新特性时不能只替换代码项目里还依赖 Scintilla 的 Qt 封装层ScintillaEdit而该封装层的ScintillaEdit.cpp/ScintillaEdit.h是由脚本从 Scintilla 的接口定义文件生成的。仓库中的 doc/Update Scintilla.md 给出了升级这套内嵌 Scintilla 的完整 4 步流程。这篇文章按该文档的操作路径展开说明每一步做什么、影响什么以及升级后如何按 doc/Building.md 的构建流程验证。适用前提已能按 doc/Building.md 完成 NotepadNext 的构建即系统装有 CMake、兼容的 C 编译器、Qt 库文档给出 Windows 下 Visual Studio 2022 Qt 6.5 的组合Linux 下用 apt 安装的 Qt6 开发包此外第 3 步需要 PythonWidgetGen.py脚本文件头声明为python3。升级前需要了解的依赖关系先确认当前仓库对 Scintilla 的依赖方式这决定了为什么升级后必须重新生成 Qt 封装根 CMakeLists.txt 通过add_subdirectory(thirdparty)引入第三方库thirdparty/CMakeLists.txt 再执行add_subdirectory(scintilla)同时还有target_link_libraries(lexilla PRIVATE scintilla)即 Lexilla 语法分析库也链接 Scintilla 静态库。thirdparty/scintilla/CMakeLists.txt 把 Scintilla 核心源文件src/*.cxx和 Qt 封装源文件qt/ScintillaEdit/ScintillaEdit.cpp、qt/ScintillaEdit/ScintillaDocument.cpp、qt/ScintillaEditBase/下的三个文件一起编译成静态库scintilla并链接Qt6::Core、Qt6::Widgets、Qt6::Core5Compat。应用代码直接包含生成的头文件例如 src/ScintillaNext.h 和 src/NppImporter.h 都有#include ScintillaEdit.h。也就是说替换 Scintilla 源码后include/Scintilla.iface接口文件会变化ScintillaEdit封装必须按新接口重新生成否则应用层包含的 API 与底层不匹配。当前仓库内嵌的 Scintilla 版本可以从 thirdparty/scintilla/version.txt 查看仓库当前值为566553可用于升级前做基线记录。升级步骤以下步骤逐条对应 doc/Update Scintilla.md。文档中路径使用 Windows 风格反斜杠Linux/macOS 上按相同目录结构书写即可。1. 清空 thirdparty/scintilla保留 CMakeLists.txt文档第 1 步删除thirdparty\scintilla中的所有文件只保留CMakeLists.txt。这是一个破坏性操作执行后该目录下的 Scintilla 源码、Qt 封装、脚本全部被移除只留下项目自建的 thirdparty/scintilla/CMakeLists.txt。建议先把当前仓库状态提交到 git 或自行备份避免旧版本代码无法找回。2. 拷贝新版 Scintilla 源码文档第 2 步将新版本的 Scintilla 发布版源码拷贝到thirdparty\scintilla。结合第 3 步脚本的实际依赖见下文拷贝进去的必须是完整的 Scintilla 发布源码至少包含include/Scintilla.iface——WidgetGen.py直接读取../../include/Scintilla.iface作为生成输入scripts/目录——WidgetGen.py会把该目录加入sys.path并import FaceWidgetGen.py 开头即有scintillaScriptsDirectory os.path.join(scintillaDirectory, scripts)。拷贝完成后目录中应同时存在新版 Scintilla 的文件和第 1 步保留的CMakeLists.txt。3. 运行 WidgetGen.py 重新生成 Qt 封装文档第 3 步进入thirdparty\scintilla\qt\ScintillaEdit\目录运行python WidgetGen.py。cd thirdparty/scintilla/qt/ScintillaEdit python3 WidgetGen.pypython3说明文档命令写作python脚本文件头声明为#!/usr/bin/env python3Linux/macOS 上请使用python3。这一步的作用可以从 WidgetGen.py 源码确认它解析../../include/Scintilla.iface用同目录下的ScintillaEdit.cpp.template和ScintillaEdit.h.template重新生成ScintillaEdit.cpp与ScintillaEdit.h覆盖旧文件。跳过这一步的后果是封装层仍对应旧版 Scintilla 接口与第 2 步拷入的新版源码不一致后续构建会失败或行为错乱。4. 按需调整 thirdparty/scintilla/CMakeLists.txt文档第 4 步Update thirdparty\scintilla\CMakeLists.txt as needed视需要更新。该文件的现状见 thirdparty/scintilla/CMakeLists.txtSCINTILLA_SOURCES变量显式列出了全部 Scintilla 核心源文件src/下约 40 个.cxx和 Qt 封装源文件。新版 Scintilla 如果增删了src/下的源文件这份清单需要同步修改否则会出现缺文件链接错误或引用不存在的文件CMake 配置错误。文档没有给出更细的判断标准as needed 指的是按新版源码树的实际文件布局核对这份清单。升级后的验证方式文档本身没有给出专门的升级验证命令可用的验证路径就是 doc/Building.md 中描述的构建流程——升级是否成功以项目能否按常规流程重新构建并运行为准。Windows文档给出的是 Visual Studio 2022 Qt Creator 流程打开 Qt Creator打开根目录CMakeLists.txt配置为Desktop Qt 6.5 MSVC2019 64bit或已安装的 Qt 版本按CtrlRQt Creator 构建并运行项目。LinuxUbuntu/Debian 流程构建命令摘自 doc/Building.mdcmake -S . -B build \ -G Ninja \ -DCMAKE_BUILD_TYPERelease \ -DAPP_DISTRIBUTION$DISTRIBUTION cmake --build build --target appimage --parallel其中DISTRIBUTIONAppImageQt6 等依赖包的 apt 安装命令见 Building.md 的 Linux 小节该 apt 命令使用sudo安装系统包会修改系统环境仅在尚未装好构建依赖时执行。如果第 3 步生成的ScintillaEdit封装与新版 Scintilla 接口不匹配应用层src/ScintillaNext.h、src/NppImporter.h等包含ScintillaEdit.h的模块会最先在构建中暴露错误可以从这些报错反向核对生成是否成功、第 4 步的 CMakeLists 清单是否漏改。限制说明doc/Update Scintilla.md 只给出 4 个步骤没有指定从何处获取 Scintilla 发布版也没有说明新旧版本之间的 API 兼容范围第 4 步的as needed同样没有进一步指引。构建侧的依赖要求以 doc/Building.md 为准CMake、C 编译器、Qt 库文档示例为 Qt 6.5Windows 下推荐 6.5macOS 构建流程在文档中标注为 TODO升级后在 macOS 上的验证方式文档未提供。【免费下载链接】NotepadNextA cross-platform, reimplementation of Notepad项目地址: https://gitcode.com/GitHub_Trending/no/NotepadNext创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门