前情提要: 在 Windows 上编译 Emacs 31 的完整方法 - Emacs-general
在这个贴子中,@LdBeth 给出了一篇在 Windows 上使用 MSYS2 安装 Emacs 的完整教程,在后续的讨论中顺便提到了使用 Windows 的 开发人员驱动器 来加速 Emacs 的启动。我也在随后尝试在 Dev Drive 中 编译 Emacs,但是相比普通环境下的编译速度似乎没有太大的区别。
照常理来说我是不会在这个问题上花时间了,但是昨天受到微软蛊惑把系统从 Win10 升级到了 11,然后我就顺带重新编译 Emacs 再重装一遍。
在 Win 10 上这个现象存在但不严重,但 Win11 上 Emacs 第一次启动时由于 native-comp 编译和丧心病狂的 Antimalware Service Executable 检查,Emacs 在我的机器上的无响应时间差不多有十来分钟,我十分怀疑通常的编译后的 Emacs 在 Win11 上能有怎样的用户体验。今天看到了 Windows如何流畅运行Emacs? - #14,来自 pinacle2000 ,为了提高 Emacs 在 Win11 上的体验不得不试试。
我当前使用的 Windows 系统为 26100.3775。
创建 Dev Drive 和相关设定
首先在 设置
→ 系统
→ 开发者选项
中勾上开发人员模式,虽然我也不知道有没有用。
随后,在 设置
→ 系统
→ 存储
→ 高级存储设置
→ 磁盘和卷
中创建开发人员驱动器,具体过程可以参考下图:
因为是动态拓展大小,所以只要小于 64TB 且足够大就行。盘符建议往大了选,也许可以避免盘符冲突?
“安装” MSYS2
这一步直接将整个 MSYS2 安装目录复制到 Dev Drive 中即可。比如这样:
编译 Emacs
将 Emacs 源代码放在 Dev Drive 中的 msys64/usr/src
下,然后执行 autogen.sh
, ./configure
和 make -jN
,最后是 make install
即可完成安装。下面是详细的说明:(注意,下面使用的是 Z 盘中的 msys2 的 UCRT,可以通过点击打开而不是使用原本安装的 MSYS2)
-
首先,可以从 Emacs 的 github 镜像获取 Emacs 源代码,如果嫌大可以加
--depth 1
,如果之后有拉取需求可以整个克隆下来Z: cd msys64\usr\src git clone https://github.com/emacs-mirror/emacs
-
获取 Emacs 源代码后,安装编译 Emacs 所需的依赖,这个可以参考 Build Emacs 31 for Windows
-
在 Emacs 源码根目录下执行
autogen.sh
和./configure
,我使用了如下configure
选项:./configure --prefix=/ucrt64 --without-pop --without-compress-install
注意我这里选择的安装目录不是
/usr
或者/usr/local
,因为我使用的是 UCRT64 子环境。同时也注意到这不是和 MSYS2 分离的安装目录,这样 Emacs 可以直接找到所需的 DLL,不用担心 native-comp,tree-sitter 等问题。 -
执行
make
编译 Emacs,可以指定-j
参数并行编译。我的机器的 i5-11300H 只有四个核心,所以使用以下命令make -j8
如果编译失败,可以尝试
make bootstrap
,它会删除所有之前的编译产物重新编译 -
执行
make install
将 Emacs 安装到/ucrt64
目录
启动 Emacs
在 /ucrt64
下找到 emacs.exe
或 runemacs.exe
点击运行即可,也可通过 addpm.exe
安装 Emacs,这样可以通过开始搜索快速找到并启动 Emacs。
(注意,需要将先前的 Emacs 配置目录 .emacs.d
放到 home/${USER}
中,然后指定环境变量 HOME
为此目录后启动 Emacs)
启动 Emacs 后,如果 Emacs 编译时启用了 native-comp 特性且能找到 libgccjit 的话,Emacs 会开始编译一些包。此时 Emacs 几乎无响应,这一状态可能会持续数分钟。在第一次启动后,随后的启动大多时候 Emacs 将处于正常可用状态,但在安装新包时的 native-comp 仍然可能会导致短暂的卡顿。
相比安装在普通位置的 Emacs,在我的机器中,在 Dev Drive 中安装的 Emacs 的启动时间似乎有一定的提升:
需要注意的是我没有多次测试,而且由于我先前没有将 MSYS2 安装到 Dev Drive 中,这个时间提升应该绝大多数来自于 从 Dev Drive 的 HOME 中加载配置和包。
优点
最主要的好处应该是将 Emacs 配置和包放到了 Dev Drive 中,减少了加载时间。
此外,由于 MSYS2,源代码和编译后的 Emacs 都在一个 Dev Drive 中,某种意义上来说可以看作简陋的 Emacs“容器”,方便分发和移动(雾)。如果你有时不时编译最新 Emacs 的需要,只需要在 /usr/src
中 pull
然后 make
, make install
即可。
由于携带了完整的 MSYS2 环境,需要的时候安装一些命令行工具也是很方便的。在不同机器之间迁移只需要加载 Dev Drive 然后设定注册表指定 Emacs 特定的 HOME 目录即可,我写了个简单的 REG 文件:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\GNU\Emacs]
"HOME"="Z:\\msys64\\home\\user"
@pinacle2000 ,方便分享下你是如何在 Dev Drive 中使用的吗?我只是简单折腾了下。