使用MSYS2/MinGW-w64环境编译GNU Emacs
2015-03-19 00:00
615 查看
摘要: 这是我写的英文版的翻译,相比原文有所扩展,但因为时间久远可能和现在的情况有所出入,如果你发现问题欢迎您反馈。之所以再翻译成中文是因为偶然之间逛中文网站,发现还有人对编译Emacs有疑惑,既然我能写中文,应该写一份中文的教程。
这是我写的Guideline for building GNU Emacs with MSYS2/MinGW-w64的翻译,相比原文有所扩展,但因为时间久远可能和现在的情况有所出入,如果你发现问题欢迎您反馈。之所以再翻译成中文是因为偶然之间逛中文网站,发现还有人对编译Emacs有疑惑,既然我能写中文,应该写一份中文的教程。
欢迎在CC BY 4.0协议下使用本文。
一不小心说多了,总之,用MSYS2/MinGW-w64能方便的编译自由/开源软件,这里我们用这个组合来编译64位的GNU Emacs,也就是项目Emacs-w64。
其中,除了前两项外其他是可选的。它们的功能分别是
base-devel
mingw-w64-x86_64-toolchain
图形库
mingw-w64-x86_64-libtiff
mingw-w64-x86_64-giflib
mingw-w6
7fe0
4-x86_64-libpng
mingw-w64-x86_64-libjpeg-turbo
mingw-w64-x86_64-librsvg
用于Libxml2
mingw-w64-x86_64-libxml2
用于GnuTLS
mingw-w64-x86_64-gnutls
第一条命令是安装Git,第二条命令在当前目录克隆Emacs项目。有一点不得不提,Gti自动改换行符的功能(autocrlf)很讨厌,下面的命令关掉它:
或者你也可以从GNU FTP下载发行版源码,以24.4为例,解压命令是在源码所在目录运行下面的命令:
如果成功的话
话说谁能告诉我上面的命令如何优雅的写出来
这是我写的Guideline for building GNU Emacs with MSYS2/MinGW-w64的翻译,相比原文有所扩展,但因为时间久远可能和现在的情况有所出入,如果你发现问题欢迎您反馈。之所以再翻译成中文是因为偶然之间逛中文网站,发现还有人对编译Emacs有疑惑,既然我能写中文,应该写一份中文的教程。
欢迎在CC BY 4.0协议下使用本文。
搭建MSYS2/MinGW-w64编译环境
MSYS2简介
MSYS2是MS-Windows下编译自由/开源软件的一个环境,衍生自Cygwin,也就是说它和Cygwin一样,编译出的程序不能脱离Cygwin环境运行(其实就是离不开那几个DLL文件)。但MSYS2有一个很牛的地方是它自带了MinGW-w64,MinGW-w64可以认为是MinGW的升级版本,编译出的程序是原生的Windows程序,最大的特点和名字一样,支持编译出64位的程序。目前MSYS2和MinGW-w64开发都很活跃,两者结合,既发挥了MSYS2对*NIX世界的兼容性,又能用MinGW-w64编译原生代码,很爽,自带的包很丰富,包管理采用Arch Linux用的Pacman,非常的方便。一不小心说多了,总之,用MSYS2/MinGW-w64能方便的编译自由/开源软件,这里我们用这个组合来编译64位的GNU Emacs,也就是项目Emacs-w64。
搭建方式
因为我们编译的是64位的Emacs,这里就以64位为例。首先下载x86_64版的MSYS2,地址在这里,安装到你喜欢的地方,比如C:\msys64。注意这个路径不能包括空格。安装后运行安装目录里的
msys2_shell.bat,你会看到一个BASH的命令行窗口。使用下面的命令安装所需的包:
pacman -S base-devel mingw-w64-x86_64-toolchain \ mingw-w64-x86_64-xpm-nox mingw-w64-x86_64-libtiff \ mingw-w64-x86_64-giflib mingw-w64-x86_64-libpng \ mingw-w64-x86_64-libjpeg-turbo mingw-w64-x86_64-librsvg \ mingw-w64-x86_64-libxml2 mingw-w64-x86_64-gnutls
其中,除了前两项外其他是可选的。它们的功能分别是
base-devel
mingw-w64-x86_64-toolchain
图形库
mingw-w64-x86_64-libtiff
mingw-w64-x86_64-giflib
mingw-w6
7fe0
4-x86_64-libpng
mingw-w64-x86_64-libjpeg-turbo
mingw-w64-x86_64-librsvg
用于Libxml2
mingw-w64-x86_64-libxml2
用于GnuTLS
mingw-w64-x86_64-gnutls
获得源码
由于现在Emacs的版本管理已经转为Git了,获取源码已经很方便了,两条命令搞定:pacman -S git git clone git://git.sv.gnu.org/emacs.git
第一条命令是安装Git,第二条命令在当前目录克隆Emacs项目。有一点不得不提,Gti自动改换行符的功能(autocrlf)很讨厌,下面的命令关掉它:
git config core.autocrlf false
或者你也可以从GNU FTP下载发行版源码,以24.4为例,解压命令是在源码所在目录运行下面的命令:
tar Jxvf emacs-24.4.tar.xz
configure; make; make install
下面就是编译安装了。运行C:\msys64里的mingw64_shell.bat,注意必须是它,这会启动一个MinGW-w64的环境。在这个窗口里切换到源码所在的目录,运行下面的命令编译Emacs并且安装到
C:\emacs。如果是从开发版编译,第一行是必须的,否则
./autogen.sh PKG_CONFIG_PATH=/mingw64/lib/pkgconfig ./configure --host=x86_64-w64-mingw32 \ --target=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --with-wide-int \ --with-jpeg --with-xpm --with-png --with-tiff --with-rsvg --with-xml2 \ --with-gnutls --with-xft --without-imagemagick make make install prefix=/c/emacs
如果成功的话
C:\emacs目录里就有编译好的Emacs了,整个过程用时几分钟罢。因为我们编译的时候用了很多由第三方库提供的功能, 所以我们编译的这个Emacs是需要那些DLL才能运行的。如果你的系统里面MSYS2已经被添加到
PATH环境变量里(例如
PATH里包含了
C:\msys2\mingw64\bin)了这不是问题,但如果环境变量里没有或者你想在其他电脑上用,需要用下面的命令复制所需的DLL到Emacs所在目录:
cp /mingw64/bin/{libwinpthread-*.dll,libXpm-noX*.dll,libdbus-*.dll} /c/emacs/bin cp /mingw64/bin/{libgomp-*.dll,libgcc_s_seh-*.dll,libglib-*.dll} /c/emacs/bin cp /mingw64/bin/{libintl-*.dll,libiconv-*.dll,libgobject-*.dll} /c/emacs/bin cp /mingw64/bin/{libffi-*.dll,libgdk_pixbuf-*.dll,libgio-*.dll} /c/emacs/bin cp /mingw64/bin/{libgmodule-*.dll,zlib*.dll,librsvg-*.dll} /c/emacs/bin cp /mingw64/bin/{libcairo-*.dll,libcroco-*.dll,libpango-*.dll} /c/emacs/bin cp /mingw64/bin/{libpangocairo-*.dll,libxml2-*.dll,libfontconfig-*.dll} /c/emacs/bin cp /mingw64/bin/{libfreetype-*.dll,libpixman-*.dll,libpng*.dll} /c/emacs/bin cp /mingw64/bin/{libpangoft*.dll,libpangowin32-*.dll,liblzma-*.dll} /c/emacs/bin cp /mingw64/bin/{libexpat-*.dll,libharfbuzz-*.dll,libgnutls-*.dll} /c/emacs/bin cp /mingw64/bin/{libgnutlsxx-*.dll,libtiff-*.dll,libtiffxx-*.dll} /c/emacs/bin cp /mingw64/bin/{libjpeg-*.dll,libgif-*.dll,libbz2-*.dll,libjbig-*.dll} /c/emacs/bin cp /mingw64/bin/{libgmp-*.dll,libhogweed-*.dll,libnettle-*.dll} /c/emacs/bin cp /mingw64/bin/{libp11-kit-*.dll,libtasn1-*.dll} /c/emacs/bin
话说谁能告诉我上面的命令如何优雅的写出来
运行
双击C:\emacs\bin目录里的
runemacs.exe,如果没有错误,你已经成功编译了一个64位的GNU Emacs。
相关文章推荐
- 使用MingGW-w64 Build Script 3.6.7搭建ffmpeg编译环境
- android openssl windows环境编译使用
- Win10环境下使用VS2015编译PJProject
- Ubuntu环境下使用g++编译cpp文件
- win7 64位环境下VS2010编译使用boost_1_62_0
- linux下的Gradle编译环境搭建与使用
- win环境下,用虚拟化工具打包Qt动态编译exe的过程(使用Enigma Virtual Box)
- Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)
- Windows环境下使用cmd面板手动编译c/c++程序
- MSYS2开发环境搭建(无幻的博客,编译OpenSSL,可使用pacman升级)
- 使用MSYS2环境中编译Qt5.5.0的补丁
- CentOS6.8下安装使用Eclipse搭建C/C++编译环境
- Windows10+VS2013环境下Dlib库的编译与使用
- Android N使用Ubuntu 14.04系统搭建编译环境
- 迁移到MSYS2 与 Qt 工具链注意的几个事情(使用MSYS2是因为需要64位的编译环境)
- Windows环境下使用minGW编译boost库(windows下编译使用asio, thread等)
- msvc交叉编译:使用vcvarsall.bat设置命令行编译环境
- (转)Ubuntu(Linux)使用Eclipse搭建C/C++编译环境
- unix环境高级编程第三版源代码编译及使用
- linux 环境下头文件声明函数后使用makefile编译文件