尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

NotepadNext 跨平台构建实战:从 Windows VS2022+Qt 到 Linux AppImage 的完整编译指南

NotepadNext 跨平台构建实战:从 Windows VS2022+Qt 到 Linux AppImage 的完整编译指南 NotepadNext 跨平台构建实战从 Windows VS2022Qt 到 Linux AppImage 的完整编译指南【免费下载链接】NotepadNextA cross-platform, reimplementation of Notepad项目地址: https://gitcode.com/GitHub_Trending/no/NotepadNext本文基于 NotepadNext 仓库的官方构建文档 doc/Building.md 展开覆盖 Windows 与 Linux 两大平台从零开始编译 NotepadNextNotepad 的跨平台重实现所需的全部工具链、依赖包与构建命令并结合根 CMakeLists.txt、cmake/Packaging.cmake 等构建脚本的源码解释每个 CMake 参数与打包目标背后的实际作用帮助你在三个操作系统上顺利编译出可运行的 NotepadNext 二进制产物。构建前置条件总览官方文档给出的最小构建依赖为CMake、一个兼容的 C 编译器、Qt 库、以及 NotepadNext 源码本身。从源码层面看这套要求有精确对应的版本约束CMake 版本根 CMakeLists.txt 要求cmake_minimum_required(VERSION 3.21)即 CMake 3.21 起步C 标准全项目强制CMAKE_CXX_STANDARD 20且不允许扩展见 CMakeLists.txt编译器必须完整支持 C20Qt 版本官方文档明确要求 Qt 6.5推荐 6.5这与 README.md 中“Qt 6.5 is the currently supported Qt version”的说明一致Qt 模块根 CMakeLists 通过find_package声明了必需组件——Core、Gui、Widgets、Network、PrintSupport、Core5Compat见 CMakeLists.txt此外 src/CMakeLists.txt 还额外要求LinguistTools用于国际化翻译打包阶段则用到 Qt 附带的部署工具windeployqt / macdeployqt / qmake。值得注意的两个平台相关编译配置见 CMakeLists.txtMSVC 下会追加_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR定义并启用/guard:cf控制流防护这是针对新版 Visual Studio 下std::mutex常量表达式构造崩溃问题的处理Linux非 Apple 的 UNIX下会加入-fstack-protector-strong -D_FORTIFY_SOURCE2编译选项与-Wl,-z,relro -Wl,-z,now链接选项属于默认开启的安全加固。Windows 平台构建Visual Studio 2022 Qt Creator本节描述的是官方文档中针对 Microsoft Visual Studio 2022 编译器的完整构建流程。安装 Visual Studio 2022下载 Visual Studio 2022 Community 安装器文档注明如果本机已装有其他版本通常也能工作运行安装器在组件选择界面勾选“Desktop development with C”使用 C 的桌面开发工作负载完成安装。安装 Qt 库下载 Qt 官方安装器并运行选择custom installation自定义安装安装任意 Qt 6.5 的版本尽可能选 6.5。需要勾选的具体组件如下MSVC 2019 64-bit位于所选 Qt 版本目录下Qt 5 Compatibility ModuleQt 5.x 无需此项——对应根 CMakeLists 中的Core5Compat组件Developer and Design ToolsQt Creator CDB Debugger SupportDeveloper and Design ToolsDebugging Tools for Windows。其中前两项直接对应构建脚本里的依赖Core5Compat被find_package(Qt6 ...)显式列出而 Qt 5 兼容模块正是该组件的运行时实体后两项则保证 Qt Creator 能使用 CDB 调试器对 MSVC 构建产物进行调试。克隆 NotepadNext 仓库在命令行cmd、git shell、PowerShell 等均可执行git clone https://gitcode.com/GitHub_Trending/no/NotepadNext.git使用 Qt Creator 构建并运行打开 Qt Creator打开仓库根目录的CMakeLists.txt文件注意是根目录文件Qt Creator 会自动识别 CMake 工程将项目配置Kit指向Desktop Qt 6.5 MSVC2019 64bit或你实际安装的 Qt 版本按CtrlRQt Creator 会完成构建并直接运行 NotepadNext。源码视角补充一次配置会拉取哪些依赖项目并未把第三方库全部内嵌而是通过 CPMCMake 包管理器见 cmake/CPM.cmake在配置阶段自动拉取远程依赖。thirdparty/CMakeLists.txt 中声明了四个 CPM 包Qt-Advanced-Docking-System 5.0.0停靠面板系统静态构建、QSimpleUpdater应用内更新对应 updates.json、SingleApplication v3.5.6单实例控制、editorconfig-core-qt.editorconfig 支持CPM 的源码缓存被固定到仓库内的.cpm-cache目录见 CMakeLists.txt避免污染用户主目录。与此同时四个子目录lua、scintilla、lexilla、uchardet是随仓库分发的本地子项目由 thirdparty/CMakeLists.txt 以add_subdirectory方式直接编译Scintilla 编辑器内核以 Qt 版静态库形式构建thirdparty/scintilla/CMakeLists.txtLexilla 语法高亮库显式链接 Scintilla。Windows 平台还有两处 CMake 细节值得一提配置阶段会用 deploy/windows/version.rc.in 生成 构建目录 中的version.rc资源文件版本号取自PROJECT_VERSION当前为 0.14并随源码一起编译见 src/CMakeLists.txt同时把 icon/NotepadNext.ico 复制进构建目录作为可执行文件图标。Linux 平台构建Ubuntu/Debian官方文档说明以下步骤基于 Ubuntu/Debian其他发行版只要能安装齐这些软件包流程应当相同。官方推荐的发行形态是AppImage。设置环境依赖完整命令如下完整继承自 doc/Building.mdexport DISTRIBUTIONAppImage export EXTRA_PLATFORM_PLUGINSlibqwayland-generic.so sudo apt update sudo apt install -y \ cmake \ ninja-build \ file \ libxkbcommon-dev \ libxkbcommon-x11-0 \ fuse \ libxcb-cursor-dev \ libcups2-dev \ libglib2.0-0 \ libglib2.0-dev \ libproxy1v5 \ libproxy-dev \ qt6-base-dev \ qt6-base-dev-tools \ qt6-tools-dev \ qt6-tools-dev-tools \ qt6-wayland \ qt6-wayland-dev \ libqt6waylandclient6 \ qml6-module-qtwayland-compositor \ libqt6core5compat6 \ libqt6core5compat6-dev \ qt6-base-private-dev两个环境变量的作用结合打包脚本可确认DISTRIBUTIONAppImage会被传给 CMake 的-DAPP_DISTRIBUTION缓存变量根 CMakeLists.txt最终以编译宏APP_DISTRIBUTIONAppImage的形式写入程序见 src/CMakeLists.txt供运行时区分发布渠道EXTRA_PLATFORM_PLUGINSlibqwayland-generic.soWayland 通用平台插件保证 AppImage 在 Wayland 会话下可正常启动。软件包清单可以按用途粗略归为四组构建工具cmake、ninja-build、file、fuse——fuse 是运行 AppImage 所必需的内核接口、X/Wayland 图形栈libxkbcommon*、libxcb-cursor-dev、qt6-wayland*、libqt6waylandclient6、qml6-module-qtwayland-compositor、Qt 本体qt6-base-dev、qt6-tools-dev 等其中qt6-tools-dev提供qmake与部署插件AppImage 打包阶段强依赖它、以及运行时库libglib*、libcups2-dev、libproxy*、libqt6core5compat6*对应 Qt 的 Core5Compat 组件。配置并构建 AppImagecmake -S . -B build \ -G Ninja \ -DCMAKE_BUILD_TYPERelease \ -DAPP_DISTRIBUTION$DISTRIBUTION cmake --build build --target appimage --parallel配置成功后构建目标是appimage这一个自定义 target。产物为NotepadNext-v版本号-x86_64.AppImage版本号来自PROJECT_VERSION当前仓库版本为 0.14。源码视角补充appimage目标做了什么在 Linux 上根 CMakeLists 末尾的include(cmake/Packaging.cmake)会按平台分派加载 cmake/PackagingLinux.cmake其中appimage目标依赖两个前置目标appdir先编译 NotepadNext再用cmake --install按APPDIR/usr前缀安装包括可执行文件usr/bin/NotepadNext、桌面项 deploy/linux/NotepadNext.desktop 以及图标 icon/NotepadNext.svgdownload_linuxdeploy自动下载 linuxdeploy 与 linuxdeploy-plugin-qt 两个 AppImage 工具到构建目录并赋予执行权限最后调用 linuxdeploy 以--appdir--plugin qt方式把 AppDir 打成最终 AppImage输出名由环境变量LDAI_OUTPUTNotepadNext-v${PROJECT_VERSION}-x86_64.AppImage决定见 cmake/PackagingLinux.cmake。一个容易踩的坑打包阶段要求能找到Qt 6 的 qmake。cmake/PackagingLinux.cmake 会先查QMAKE环境变量否则用find_program查找并校验qmake -query QT_VERSION输出必须以6.开头找不到会直接FATAL_ERROR错误信息中给出的解法是重新配置QMAKE$(which qmake6) cmake -S . -B build -DAPP_DISTRIBUTIONAppImage如果只想编译可执行文件而不打 AppImage直接cmake --build build --parallel构建默认的 NotepadNext 目标即可。macOS 平台构建官方文档中 macOS 一节目前仍是 TODO 状态仓库本身已提供完整的 macOS 构建与打包支持可以从源码中确认以下事实供 macOS 构建者参考根 CMakeLists.txt 对 Apple 平台加入了-flat_namespace与-undefined,suppress链接选项用于规避 Qt 6.5/6.8 在较新 Xcode移除 AGL 框架后下的链接失败src/CMakeLists.txt 将可执行文件设为MACOSX_BUNDLE并使用 deploy/macos/info.plist 作为 Bundle 信息文件cmake/PackagingMac.cmake 定义了dmg打包目标先install_local安装 Bundle再用macdeployqt -dmg生成并改名为NotepadNext-v版本.dmgREADME.md 说明项目在 macOS 上“已知可成功构建”并通过 Homebrew Tap 分发。综合来看macOS 上构建路径与 Linux 类似安装 CMake、Ninja、Xcode 命令行工具链与 Qt 6.5含 Core5Compat 组件然后执行与 Linux 相同的cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPERelease配置命令即可打成 DMG 时构建dmg目标。具体命令组合请以实际工具链为准官方文档该章节尚未定稿。附其他发行目标的构建入口除 Linux 的appimage目标外Windows 打包逻辑在 cmake/PackagingWindows.cmake 中定义了三个自定义目标熟悉后方便自行产出发布物目标作用关键工具package把可执行文件、LICENSE 以及 deploy/windows/libcrypto-1_1-x64.dll、deploy/windows/libssl-1_1-x64.dll 复制到build/package再运行 windeployqt参数含--no-translations --no-compiler-runtime等Debug 配置自动追加--debugwindeployqtzip依赖package用 7z 打包为NotepadNext-v版本.zip7zinstaller依赖package用 makensis 执行 installer/installer.nsi 生成 NSIS 安装包NSISmacOS 侧对应入口为 cmake/PackagingMac.cmake 的install_local与dmg。小结构建 NotepadNext 的硬约束是CMake ≥ 3.21、C20 编译器、Qt ≥ 6.5含 Core5Compat 与 LinguistTools 组件Windows 侧走 VS 2022 C 工作负载 Qt CreatorLinux 侧按官方文档装齐 apt 包后用cmake --build build --target appimage --parallel产出 AppImage依赖管理分两条腿随仓库分发的本地子项目scintilla、lexilla、lua、uchardet CPM 在线拉取的四个 CPM 包缓存于.cpm-cache因此配置阶段需要可访问的 git 网络打包目标appimage/package/zip/installer/dmg均由cmake/Packaging.cmake按平台分派构建时按需选择目标即可不影响纯可执行文件的常规构建。【免费下载链接】NotepadNextA cross-platform, reimplementation of Notepad项目地址: https://gitcode.com/GitHub_Trending/no/NotepadNext创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表