Mac OS Catalina源码编译Emacs

原来一直在用Macdown或者MWeb在写博客,但是在公式多了以后渲染会有些慢,并且从工作流的角度也需要在term和软件本身之间进行不断地切换. 比如, 需要在命令行环境下面用hexo new生成文章, 然后进行编辑, 编辑完成以后再回到命令行环境去提交. 总之, 还是有着诸多不便.

对于emacs一直有所耳闻, 原来在台式机上面的Ubuntu16.04 上面也安装配置过, 但是从来没有跨越一步到每天去用的地步. 直到有一天偶然的机会, emacs又进入了我的视野. 装上以后拿了一个可用的配置, 发现用了写markdown文件是再好不过了, 简洁的界面, 借助hexo可以直接使用M-x命令调用hexo-new命令创建文章, 编辑的话, 因为原来对于vim略有了解, 也正好有相关开箱即用的插件可以完美实现vim的编辑功能, 而提交就更加简单了, magit插件功能异常强大, 大大提高工作流效率.

不过悲剧的是, 在将系统从Mojave升级到Catalina之后, 就出现各种闪退的问题, 试了好多个版本和方法以及不同地配置, 问题依旧, 于是只能使出杀手锏: 直接从源码编译, 也许不一定能够解决问题,但是也是增加一些经验。

下面就把整个编译过程和遇到的一些坑介绍一下。

前期准备工作

Xcode 命令行工具安装

1
xcode-select --install

相关配置包的安装

1
brew install autoconf automake texinfo gnutls pkg-config libxml2 --debug --verbose

源码下载

1
git clone https://github.com/emacs-mirror/emacs.git

这里需要注意的是,源码还是挺大的,将近1个G,那么如果提供在命令行环境下的源码拉取速度就至关重要。

由于众所周知的原因,使用代理应该是必然的,另外git本身是走ssh协议的,如果只是就https设置了代理,那么需要注意拉取代码时所使用的协议,应该使用你有设置过代理的协议。

源码编译

环境变量配置

我在一开始安装的时候,总是遇到这样的问题:

1
2
3
4
5
6
xml.c:23:10: fatal error: 'libxml/tree.h' file not found
#include <libxml/tree.h>
^
1 error generated.
make[1]: *** [xml.o] Error 1
make: *** [src] Error 2

即便在brew install libxml2以后,后来才发现在编译之前需要对PKG_CONFIG_PATH进行一些配置,具体如下:

1
2
3
export LDFLAGS="-L/usr/local/opt/libxml2/lib"
export CPPFLAGS="-I/usr/local/opt/libxml2/include"
export PKG_CONFIG_PATH="/usr/local/opt/libxml2/lib/pkgconfig"

编译

正确配置以后编译还是比较简单的,主要有以下两步:

1
2
cd ./emacs && ./autogen.sh
./configure && make && make install

安装

编译完成以后在命令行运行

1
open -R nextstep/Emacs.app

可以将Emacs.app移动你想移动去的地方,比如/Applications

编译后以后的版本信息为:

1
2
3
4
5
6
GNU Emacs 27.0.50
Copyright (C) 2019 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GNU Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.

比起目前稳定版本26.3略有超前,使用到现在未有出现过新的闪退,希望一切平稳~