ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Neovim 从源码构建完全指南:构建类型、捆绑依赖管理与多平台交叉编译(BUILD.md 深度解读)

Neovim 从源码构建完全指南:构建类型、捆绑依赖管理与多平台交叉编译(BUILD.md 深度解读) Neovim 从源码构建完全指南构建类型、捆绑依赖管理与多平台交叉编译BUILD.md 深度解读【免费下载链接】neovimVim-fork focused on extensibility and usability项目地址: https://gitcode.com/GitHub_Trending/ne/neovim本文基于 Neovim 仓库根目录的 BUILD.md 展开完整覆盖从安装构建前置依赖、选择构建类型、配置 CMake 选项到 Windows 多环境构建、本地化构建、离线/静态/捆绑依赖管理再到 Zig 构建系统与交叉编译含 WebAssembly 目标的全流程。读完后你可以在任意主流 Linux 发行版、macOS、Windows、FreeBSD/OpenBSD/Haiku 上从源码构建出可用的nvim可执行文件并能读懂仓库构建系统的 CMake 底层实现为二次开发和问题排查打下基础。重要提示升级到新版本前务必先查阅版本变更说明中关于破坏性改动的部分可参考 runtime/doc/news.txt。快速开始Quick Start最简路径只需五步适用于 Unix 类系统在你的系统上安装构建前置依赖。克隆仓库git clone https://gitcode.com/GitHub_Trending/ne/neovimcd neovim如果希望构建稳定版stable release同时执行git checkout stable。make CMAKE_BUILD_TYPERelWithDebInfo如需安装到自定义位置设置CMAKE_INSTALL_PREFIX参见 INSTALL.md。在 BSD 系统上请将make换成gmake。在 Windows 上构建见下文Windows 构建一节推荐 MSVCVisual Studio。sudo make install默认安装位置为/usr/local。在 Debian/Ubuntu 上可以改用cd build cpack -G DEB sudo dpkg -i nvim-linux-arch.debarch为x86_64或arm64来构建并安装 DEB 包便于后续干净地卸载文件。注意这是 Nvim 构建中不受支持的尽力而为特性。关键说明从仓库根目录运行make会自动下载并构建所有需要的依赖最终把nvim可执行文件放到build/bin。第三方依赖libuv、LuaJIT 等会被自动下载到.deps/目录。构建完成后无需安装即可直接运行VIMRUNTIMEruntime ./build/bin/nvim。如果你计划开发 Neovim建议安装 Ninja 以获得更快的构建速度安装后构建系统会自动启用它。安装 ccache 可加速 Neovim 的重编译它会默认被使用如需禁用执行CCACHE_DISABLEtrue make。从源码结构看make 自动选 Ninja 这一行为来自根目录 Makefile当command -v ninja成功时CMAKE_GENERATOR默认被设为Ninja否则回退到Unix Makefiles这也是文档中装了 Ninja 就不要再加-j参数的原因。运行测试构建后运行测试套件参见 test/README.md。构建类型Build Type确认已安装前置依赖后可以通过其他构建目标继续构建。_build type_决定编译器优化等级与调试信息量Release完整编译优化、无调试信息。可期望获得最佳性能发行版打包者常用。Debug完整调试信息、较少优化。开发调试GDB/LLDB 输出有意义时使用。若不指定CMAKE_BUILD_TYPE默认就是 Debug——这一点可从 CMakeLists.txt 中的set_default_buildtype(Debug)得到印证。RelWithDebInfoRelease With Debug Info启用大量优化并加入足够调试信息使 Neovim 崩溃时仍能拿到 backtrace。因此发布构建只需make CMAKE_BUILD_TYPERelease若安装了ninja不要加-j参数构建会自动并行。编译完成后nvim可执行文件位于build/bin。验证构建类型./build/bin/nvim --version | grep ^Build一个源码级细节RelWithDebInfo 构建有意保留断言。CMakeLists.txt 会把RelWithDebInfo标志中的-DNDEBUG替换为-DRELDEBUG注释明确写着 Wewantassertions in RelWithDebInfo build-type因此该构建类型既保留优化性能又可在崩溃时通过断言信息定位问题。安装位置与缓存失效把可执行文件安装到指定位置make CMAKE_INSTALL_PREFIX$HOME/local/nvim installCMake 会把大量信息缓存到build/CMakeCache.txt。如果你想更改CMAKE_BUILD_TYPE或CMAKE_INSTALL_PREFIX请先执行rm -rf build。在 Git 提交新增或删除文件包括runtime中的文件后重新构建时同样需要先清掉缓存——拿不准时执行make distclean它基本上是rm -rf build .deps的快捷方式。从源码看有两点佐证Makefile 中的distclean目标会删除.deps、build、.zig-cache、zig-out并调用clean。Makefile 定义了checkprefix目标当传入的CMAKE_INSTALL_PREFIX与 CMake 缓存值不一致时自动删除build/.ran-cmake标记并强制重跑 CMake 配置避免安装到错误目录。PUC Lua 构建默认使用 LuaJIT 作为 Lua 引擎。若要改用 PUC Luamake CMAKE_EXTRA_FLAGS-DPREFER_LUAON DEPS_CMAKE_FLAGS-DUSE_BUNDLED_LUAJITOFF -DUSE_BUNDLED_LUAON引擎选择逻辑体现在 cmake.deps/CMakeLists.txtUSE_BUNDLED_LUAJIT优先其次USE_BUNDLED_LUA否则调用find_package在系统中寻找 LuaJIT 或 Lua 5.1都找不到则直接FATAL_ERROR。查看构建选项Build Options列出本项目定义的全部 CMake 选项cmake -B build -LH其中与依赖管理最相关的一组选项定义在 cmake.deps/CMakeLists.txt默认全部跟随USE_BUNDLED默认ONCMake 选项控制对象默认值USE_BUNDLED总开关使用捆绑依赖ONUSE_BUNDLED_LIBUVlibuv跟随USE_BUNDLEDUSE_BUNDLED_LUAPUC Lua默认仅用于测试需显式开启OFFUSE_BUNDLED_LUAJITLuaJIT跟随USE_BUNDLEDUSE_BUNDLED_LUVluv跟随USE_BUNDLEDUSE_BUNDLED_TStree-sitter 运行时跟随USE_BUNDLEDUSE_BUNDLED_TS_PARSERStree-sitter 解析器跟随USE_BUNDLEDUSE_BUNDLED_UNIBILIUMunibilium跟随USE_BUNDLEDUSE_BUNDLED_UTF8PROCutf8proc跟随USE_BUNDLEDUSE_BUNDLED_GETTEXT/USE_BUNDLED_LIBICONVgettext / libiconv仅 MSVC 平台默认ON其余OFFENABLE_WASMTIMEwasmtimetree-sitter WASM 支持OFFUSE_EXISTING_SRC_DIR跳过依赖源码下载使用已有源码目录离线构建用OFF每个被启用的选项会 include 对应的构建模块例如USE_BUNDLED_LUAJIT→ BuildLuajit.cmake、USE_BUNDLED_TS→ BuildTreesitter.cmake。顶层 CMakeLists.txt 还定义了ENABLE_LTO非 MinGW 平台默认ON、ENABLE_LIBINTLON、ENABLE_UNIBILIUMON、ENABLE_WASMTIMEOFF等主程序侧开关以及ENABLE_ASAN_UBSAN/ENABLE_MSAN/ENABLE_TSAN三类互斥的 sanitizer 选项。Windows 构建Windows / MSVCMSVCVisual Studio是 Windows 上推荐的构建方式。安装 Visual Studio2017 或更新版本勾选Desktop development with C工作负载。32 位 Windows 上需要处理 Ninja 二进制格式不兼容的问题Visual Studio 反馈社区有对应工单。用 Visual Studio 打开 Neovim 项目文件夹。Visual Studio 应能检测到 CMake 文件并自动开始构建。选择nvim.exe (bin\nvim.exe)目标并按 F5 运行。若构建失败可能是在你切换到x86-Release之前Visual Studio 已用x64-{Debug,Release}发起了构建。处理方式右键 CMakeLists.txt →Delete Cache再右键 →Generate Cache。若看到来自ntdll的 access violation可忽略并继续。若出现uv.dll not found之类的错误先尝试nvim.exe (Install)目标然后切回nvim.exe (bin\nvim.exe)。源码层面有个便利设计CMakeLists.txt 检测到CLION_IDE或VisualStudioEdition环境变量时会自动代你构建捆绑依赖execute_process调用cmake.deps这正是Visual Studio 打开即自动构建的底层原因。Windows / MSVC PowerShell如果希望从命令行直接调用cmake确保 Visual Studio 环境变量已加载任选其一使用Visual Studio Developer Command Prompt或Developer PowerShell在 PowerShell 中通过 Pscx 模块调用Import-VisualStudioVars在命令提示符中执行VsDevCmd.bat -archx64这一步是为了让luarocks能找到 Visual Studio 安装避免回退到 MinGW 并报mingw32-gcc is not recognized as an internal or external command之类的错误。在 Developer PowerShell 或 Developer Command Prompt 中cmake -S cmake.deps -B .deps -G Ninja -D CMAKE_BUILD_TYPERelease cmake --build .deps --config Release cmake -B build -G Ninja -D CMAKE_BUILD_TYPERelease cmake --build build --config Release想要调试构建省略--config Release。想用 Visual Studio 生成器省略-G Ninja。Windows / CLion安装 CLion。用 CLion 打开 Neovim 项目。选择Build → Build All in Release。Windows / Cygwin自上游 PR #36417 之后Cygwin 构建可能简单到make make install若失败替代方案按常规方式安装所有依赖。Cygport 仓库包含所有 Cygwin 发行版中不可用依赖的 Cygport 文件如APKBUILD、PKGBUILD并描述了构建所需的特殊命令或参数除非提供了自定义命令Cygport 只会在干净一致的方式下调用autogen/cmake、make、make install等。社区项目 neovim-cygwin 基于 Cygwin 2.9.0 构建更新的libuv可能需要更少的打补丁。Cygwin 2.10.0 中部分 SSP 行为变化也可能影响 Neovim 的构建。不使用捆绑依赖构建treesitter 解析器除外cmake -S cmake.deps -B .deps -G Ninja -D CMAKE_BUILD_TYPERelWithDebInfo -DUSE_BUNDLEDOFF -DUSE_BUNDLED_TSON cmake --build .deps cmake -B build -G Ninja -D CMAKE_BUILD_TYPERelWithDebInfo cmake --build buildWindows / MSYS2 / MinGW在 MSYS2 shell 中安装这些包pacman -S \ mingw-w64-ucrt-x86_64-gcc \ mingw-w64-x86_64-{cmake,make,ninja,diffutils}在 Windows 命令提示符cmd.exe中设置PATH并构建set PATHc:\msys64\ucrt64\bin;c:\msys64\usr\bin;%PATH%两个选项任选使用cmakeNinja生成器cmake -S cmake.deps -B .deps -G Ninja -D CMAKE_BUILD_TYPERelWithDebInfo cmake --build .deps cmake -B build -G Ninja -D CMAKE_BUILD_TYPERelWithDebInfo cmake --build build若因权限限制无法用ninja install安装可以改装到你有写权限的目录cmake -S cmake.deps -B .deps -G Ninja -D CMAKE_BUILD_TYPERelWithDebInfo cmake --build .deps cmake -B build -G Ninja -D CMAKE_INSTALL_PREFIXC:\nvim -D CMAKE_BUILD_TYPERelWithDebInfo cmake --build build或者使用mingw32-makemingw32-make deps mingw32-make CMAKE_BUILD_TYPERelWithDebInfo :: 也可指定自定义前缀 :: 默认为 C:\Program Files (x86)\nvim :: mingw32-make CMAKE_BUILD_TYPERelWithDebInfo CMAKE_INSTALL_PREFIXC:\nvim mingw32-make installWindows WSL在 Windows Subsystem for LinuxWSL中构建 Ubuntu/Debian 的 Linux 二进制# 安装构建前置依赖 sudo apt-get install ninja-build gettext cmake build-essential # 在 WSL 中构建 linux 二进制 make CMAKE_BUILD_TYPERelWithDebInfo # 在 WSL 中安装 linux 二进制arch 为 x86_64 或 arm64 cd build cpack -G DEB sudo dpkg -i nvim-linux-arch.deb # 验证安装 nvim --version which nvim # 应为 /usr/bin/nvim 的 debug 构建注意如果构建期间遇到链接错误或 segfault可能是 PATH 中的 Windows 库在捣乱。使用干净的 PATH 避免冲突PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin make CMAKE_BUILD_TYPERelWithDebInfo本地化Localization构建本地化翻译默认关闭。通过 CMake 标志ENABLE_TRANSLATIONSON开启构建make CMAKE_EXTRA_FLAGS-DENABLE_TRANSLATIONSON这会在build/src/nvim/po生成.mo文件。若看到msgfmt: command not found需要安装gettext。多数系统上包名就叫gettext。翻译源文件位于 src/nvim/po 目录.po文件。检查本地化检查$LANG的翻译运行make -C build check-po-$LANG。例如cmake --build build --target check-po-de cmake --build build --target check-po-pt_BRcheck-po-$LANG会在./build/src/nvim/po/check-${LANG}.log生成详细报告该报告由nvim生成而非msgfmt。更新本地化用最新字符串更新src/nvim/po/$LANG.pocmake --build build --target update-po-$LANG注意更新后请运行src/nvim/po/cleanup.vim。编译器选项查看头文件包含链使用-H选项源自 issue #918echo #include ./src/nvim/buffer.h | \ clang -I.deps/usr/include -Isrc -stdc99 -P -E -H - 21 /dev/null | \ grep -v /usr/grep -v /usr/用于过滤系统头文件。也可以加-save-temps来查看展开后的宏或注释形式的汇编。自定义 Makefilelocal.mk你可以通过在仓库根目录创建local.mk来本地化定制构建流程——它被主 Makefile 顶部的-include local.mk引用且列入.gitignore因此可跨分支使用。local.mk中的新目标会覆盖默认 make 目标。一个示例local.mk添加了一个强制重建的目标但不覆盖默认目标all: rebuild: rm -rf build make更完整的可定制项可参考 contrib/local.mk.example其中注释说明了各类常用覆盖CMAKE_EXTRA_FLAGS -DCMAKE_INSTALL_PREFIX/usr/local/nvim-latest修改安装前缀CMAKE_BUILD_TYPE : Debug设置构建类型默认 Debug非 Debug 构建默认开启 IPO含 LTO链接耗时较长可CMAKE_EXTRA_FLAGS -DENABLE_LTOOFF关闭——对应 CMakeLists.txt 中的ENABLE_LTO选项DEPS_CMAKE_FLAGS -DUSE_BUNDLED_LUAJITOFF等逐项切换到系统依赖或-DUSE_BUNDLEDOFF一次性全部关闭日志级别Debug 构建使用全部日志级别Release/RelWithDebInfo 只有 WARNING/ERROR除非加-DNVIM_LOG_DEBUG。第三方依赖Third-party Dependencies依赖的精确清单与版本可以参考 Debian 源包neovim或 Homebrew formula。仓库内有一份机器可读的依赖清单 cmake.deps/deps.txt每个依赖都带 URL 与 SHA-256 校验和当前锁定的主要版本包括libuv v1.52.1、LuaJIT固定 commit 快照、PUC Lua 5.1.5、unibilium v2.1.4、luv 1.52.1-0、utf8proc v2.11.3、tree-sitter v0.27.0 及 c/lua/vim/vimdoc/query/markdown 等内置解析器、wasmtime v48.0.1。用 CMake 构建捆绑依赖cmake -S cmake.deps -B .deps -G Ninja -D CMAKE_BUILD_TYPERelWithDebInfo cmake --build .deps默认情况下库和头文件被放到.deps/usr。随后构建 Neovimcmake -B build -G Ninja -D CMAKE_BUILD_TYPERelWithDebInfo cmake --build build不使用捆绑依赖构建手动安装依赖libuv、libluv、libutf8proc、luajit、lua-lpeg、tree-sitter、tree-sitter-c、tree-sitter-lua、tree-sitter-markdown、tree-sitter-query、tree-sitter-vim、tree-sitter-vimdoc、unibilium。运行 CMakecmake -B build -G Ninja -D CMAKE_BUILD_TYPERelWithDebInfo cmake --build build如果并非所有依赖都能从软件源获得可以只部分使用捆绑依赖ninja示例cmake -S cmake.deps -B .deps -G Ninja -D CMAKE_BUILD_TYPERelWithDebInfo -DUSE_BUNDLEDOFF -DUSE_BUNDLED_TSON cmake --build .deps cmake -B build -G Ninja -D CMAKE_BUILD_TYPERelWithDebInfo cmake --build build运行make、ninja或你告诉 CMake 生成的构建工具。强烈推荐使用ninja。如果 tree-sitter 解析器不是捆绑的它们需要出现在运行时的parser/目录中例如/usr/share/nvim/runtime/parser/。离线构建Build offline在库过旧或缺失、且无网络的系统上你可能想用捆绑依赖构建。支持方式如下在联网机器上采用以下任一方式把依赖源码以构建可用的形式放入.deps获取官方 deps 仓库neovim/deps 的src/分支它是.deps/build/src/的自动更新清理后快照到.deps/build/src/或者运行make deps生成.deps/再按 CI 构建流程中给出的清理命令清理它。把准备好的.deps拷贝到隔离机器无网络。在隔离机器上启用USE_EXISTING_SRC_DIR构建make deps DEPS_CMAKE_FLAGS-DUSE_EXISTING_SRC_DIRON makeUSE_EXISTING_SRC_DIR选项在 cmake.deps/CMakeLists.txt 中定义为 Skip download of deps sources in case of existing source directory默认OFF。不使用 unibilium 构建unibilium 是唯一采用 LGPLv3 许可的依赖仓库中没有 GPLv3-only 依赖。它用于运行时加载 terminfo 数据库如果内置的常见终端定义够用可以禁用它。若要避免该依赖转而依赖内置 terminfo 定义构建时make CMAKE_EXTRA_FLAGS-DENABLE_UNIBILIUM0 DEPS_CMAKE_FLAGS-DUSE_BUNDLED_UNIBILIUM0运行时可通过has(terminfo) 1确认 unibilium 是否被包含未包含时该函数为假。指定部分捆绑依赖例如同时构建部分捆绑 部分非捆绑的混合配置make DEPS_CMAKE_FLAGS-DUSE_BUNDLEDOFF -DUSE_BUNDLED_LUVON -DUSE_BUNDLED_TSON -DUSE_BUNDLED_LIBUVON注意 Makefile 对旧写法做了防护BUNDLED_CMAKE_FLAG、BUNDLED_LUA_CMAKE_FLAG已移除直接报错提示改用DEPS_CMAKE_FLAGS另外USE_BUNDLED作为 Make 变量传入时会被自动前缀成-DUSE_BUNDLED...合并进DEPS_CMAKE_FLAGS。构建静态二进制Linux使用 musl C 的 Linux 发行版glibc 不支持静态链接。下文以 Alpine Linux 为例任何带 musl 的发行版均可。传STATIC_BUILD变量执行 makemake CMAKE_EXTRA_FLAGS-DSTATIC_BUILD1不在 Alpine 上时可以用容器构建podman run \ --rm \ -it \ -v $PWD:/workdir \ -w /workdir \ alpine:latest \ sh -c apk add build-base cmake coreutils curl gettext-tiny-dev git linux-headers make CMAKE_EXTRA_FLAGS-DSTATIC_BUILD1build/bin/nvim中产出的二进制会把所有依赖静态链接build/bin/nvim: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, BuildID[sha1]..., with debug_info, not stripped构建前置依赖Build Prerequisites通用要求Clang 或 GCC 4.9CMake 3.16需带 TLS/SSL 支持构建。可选从 cmake.org 获取最新版 CMake提供 shell 安装脚本适用于多数 Linux 系统运行后确保cmake二进制在你的$PATH中以便 Nvim 构建能找到它。CMake 最低版本 3.16 的要求可在 CMakeLists.txt 的cmake_minimum_required(VERSION 3.16)中得到确认。以下按平台列出具体前置依赖。Ubuntu / Debiansudo apt-get install ninja-build gettext cmake curl build-essential gitRHEL / Fedorasudo dnf -y install ninja-build cmake gcc make gettext curl glibc-gconv-extra gitopenSUSEsudo zypper install ninja cmake gcc-c gettext-tools curl gitArch Linuxsudo pacman -S base-devel cmake ninja curl gitAlpine Linuxapk add build-base cmake coreutils curl gettext-tiny-dev gitVoid Linuxxbps-install base-devel cmake curl gitNixOS / Nix自 NixOS 18.03 起Neovim 二进制位于neovim-unwrappedNix 包中neovim包只是设置 Ruby/Python 支持等运行时选项的 wrappercd path/to/neovim/src进入nix-shell拉取 Neovim 依赖nix-shell nixpkgs -A neovim-unwrapped配置并构建rm -rf build cmakeConfigurePhase buildPhase测试默认不可用存在未修复的失败。可在 overlay 中启用neovim-dev (super.pkgs.neovim-unwrapped.override { doChecktrue; }).overrideAttrs(oa:{ cmakeBuildTypedebug; nativeBuildInputs oa.nativeBuildInputs [ self.pkgs.valgrind ]; shellHook export NVIM_PYTHON_LOG_LEVELDEBUG export NVIM_LOG_FILE/tmp/log export VALGRIND_LOG$PWD/valgrind.log ; });然后把neovim-unwrapped替换为neovim-devnix-shell nixpkgs -A neovim-dev社区 flakenix-community/neovim-nightly-overlay提供三个包neovim运行 nightlyneovim-debug带调试符号运行neovim-developer获取开发 Neovim 所需的全部工具。因此可以用nix run github:nix-community/neovim-nightly-overlay运行 Neovim nightly类似地用nix run github:nix-community/neovim-nightly-overlay#neovim-developer进入开发环境。要使用特定版本的 Neovim可传--override-input neovim-src .使用当前目录或指定具体 SHA1如--override-input neovim-src github:neovim/neovim/89dc8f8f4e754e70cbe1624f030fb61bded41bc2。Haiku部分依赖可来自 Haiku 仓库其余需要捆绑依赖cmake -DUSE_BUNDLED_LIBUVOFF -DUSE_BUNDLED_UNIBILIUMOFF -DUSE_BUNDLED_LUAJITOFF -B .deps ./cmake.deps make -C .depsFreeBSDsudo pkg install cmake gmake sha wget gettext curl git如果遇到sha256sum不匹配错误且实际的 SHA-256 哈希为e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855那么这就是你的问题所在这是空文件的 sha256sum说明下载没有真正发生。OpenBSDdoas pkg_add gmake cmake curl gettext-tools git ninjaninja技术上是可选的但没有它构建很可能会失败因为那时cmake会使用make而捆绑的 LuaJIT 需要gmake。替代方案是安装系统luajit并禁用捆绑 LuaJITgmake DEPS_CMAKE_FLAGS-DUSE_BUNDLED_LUAJIT0另一个变通办法是编辑 cmake/Deps.cmake注释掉set(MAKE_PRG $(MAKE))一行让MAKE_PRG保持为gmake这样 LuaJIT 会用gmake构建。macOSmacOS / Homebrew安装 Xcode Command Line Toolsxcode-select --install安装 Homebrew安装 Neovim 构建依赖brew install ninja cmake gettext curl git注意如果看到 Wget 证书错误macOS 10.10 以下旧版本brew install curl-ca-bundle echo CA_CERTIFICATE$(brew --prefix curl-ca-bundle)/share/ca-bundle.crt ~/.wgetrc注意如果看到stdio.h file not found尝试open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgmacOS / MacPorts安装 Xcode Command Line Toolsxcode-select --install安装 MacPorts安装 Neovim 构建依赖sudo port install ninja cmake gettext git注意Wget 证书错误macOS 10.10 以下sudo port install curl-ca-bundle echo CA_CERTIFICATE/opt/local/share/curl/curl-ca-bundle.crt ~/.wgetrc注意stdio.h file not found的解决办法同上安装 macOS SDK headers 包。面向旧版 macOS 构建从新版 macOS 构建面向旧版 macOS 的二进制需设置部署目标make CMAKE_BUILD_TYPERelease MACOSX_DEPLOYMENT_TARGET10.13 DEPS_CMAKE_FLAGS-DCMAKE_CXX_COMPILER$(xcrun -find c)这里显式指定 C 编译器是为了在设置部署目标后仍能被找到。对应源码逻辑CMakeLists.txt 在CMAKE_OSX_DEPLOYMENT_TARGET未手动设置时用sw_vers -productVersion回退到本机系统版本且 cmake.deps/CMakeLists.txt 中做了同样的处理注释明确说明两边都要设置。使用 Zig 构建前置条件zig 0.16.x操作步骤构建编辑器zig build运行./zig-out/bin/nvim带运行时完整安装zig build install --prefix ~/.local测试zig build functionaltest运行全部功能测试zig build functionaltest -- test/functional/autocmd/bufenter_spec.lua运行单个文件中的测试zig build unittest运行全部单元测试zig build oldtest运行全部 oldtests构建定义在根目录 build.zig版本常量0.13.0-dev、API level 15与 CMake 构建保持一致测试步骤由 test/run_tests.zig 提供。使用系统依赖zig build -h中的 Available System Integrations 一节列出可用的系统集成。启用某个集成例如zig build -fsysutf8proc会使用系统安装的 utf8proc。从源码看build.zig 的SystemIntegrationOptions结构体定义了五个可集成的库lua、tree_sitter、unibilium、utf8proc、uv与-fsys选项一一对应。zig build --system deps_dir会启用所有集成并关闭依赖拉取。这要求你预先下载那些没有系统集成的依赖编写本文时是 ziglua 和内置 tree-sitter 解析器到deps_dir需要创建以各包哈希命名的子目录并把依赖解压在其中——ziglua 应放在deps_dir/zlua-0.1.0-hGRpC1dCBQDf-IqqUifYvyr8B9-4FlYXqY8cl7HIetrC之下依此类推。哈希从 build.zig.zon 中获取。社区仓库中的PKGBUILD的prepare函数可作为参考示例。交叉编译Cross-compiling交叉编译未完全支持但仓库在此收集笔记以备参考欢迎改进。该节同样适用于 WebAssemblyWASM构建。cmake设置NVIM_HOST_PRG使文档与 tags 生成不依赖目标二进制即可工作。zig build交叉编译通常只需设置-Dtarget即可开启例如从 Linux 主机zig build -Dtargetaarch64-macos会自动编译一个 host 侧 Lua 供构建过程使用。-Dhost{target_string}选项可覆盖编译期运行二进制时所用的平台-Dhostnative强制完全交叉编译-Dhost空字符串假定目标二进制能在主机上运行例如 x86_64 系统上目标是 x86或通过 binfmt 之类设置了仿真。-Dhost的语义在 build.zig 中可见当目标为 native 或架构/系统相同且未显式指定时host 为空串不交叉编译否则回退为native此时会额外编译一份 host 侧依赖如ziglua_host见 build.zig。WebAssembly实验性Neovim 可以使用wasm32-emscripten目标交叉编译为 WebAssembly。需要 Emscripten SDKemsdk。安装并激活后把它的 sysroot 传给-Demscripten-sysroot例如$EMSDK/upstream/emscripten/cache/sysroot。构建 WebAssembly 目标zig build nvim_bin \ -Dtargetwasm32-emscripten \ -Demscripten-sysroot$EMSDK/upstream/emscripten/cache/sysroot这会产出nvim.wasmWebAssembly 模块nvim.jsEmscripten 生成的 JavaScript loader。仓库中 src/wasm 目录包含了配套的网页运行环境index.html、app.js、nvim-worker.js、serve.py等emscripten-sysroot选项本身定义在 build.zig用于把 Emscripten 的include/目录注入编译过程。该目标当前标记为实验性功能与稳定性以实际构建结果为准。小结场景关键命令 / 选项最快上手make CMAKE_BUILD_TYPERelWithDebInfo发布构建make CMAKE_BUILD_TYPERelease自定义安装前缀make CMAKE_INSTALL_PREFIX... install查看全部 CMake 选项cmake -B build -LH切换系统/捆绑依赖DEPS_CMAKE_FLAGS-DUSE_BUNDLED...系列离线构建make deps DEPS_CMAKE_FLAGS-DUSE_EXISTING_SRC_DIRON静态二进制musl 发行版 make CMAKE_EXTRA_FLAGS-DSTATIC_BUILD1本地定制根目录local.mk参照 contrib/local.mk.exampleZig 构建zig build0.16.xWASM实验性zig build nvim_bin -Dtargetwasm32-emscripten -Demscripten-sysroot...本文全部内容均以当前仓库源码版本号 0.13.0-devAPI level 15实际文件为准构建入口见 Makefile 与 CMakeLists.txt依赖管理见 cmake.deps/CMakeLists.txt 与 cmake.deps/deps.txtZig 构建见 build.zig。【免费下载链接】neovimVim-fork focused on extensibility and usability项目地址: https://gitcode.com/GitHub_Trending/ne/neovim创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表