如何在MS-Windows上构建Emacs主分支(也称为主干)


11

我今天尝试了一下,开始着手为MS-Windows构建最新的Emacs master分支开发人员版本(又名Emacs Trunk)。

我找到了一个旧博客并执行了该过程,但遇到一条错误消息,告诉我不再支持特定方法。错误消息使我读到: .../emacs/nt/INSTALL。好吧,如果已经安装/配置了用于构建Emacs的基础架构,那就太好了。

如果有第1、2、3步描述所需的工具,以及如何着眼于在MS-Windows上构建Emacs的方式进行安装/配置,那肯定很方便。

如果有人想编写详细的论文,请随时发布答案。如果不是这样,一旦我弄清楚怎么做,我就会自己写一个。我遇到了其他障碍,并在此期间提交了错误报告-我尚不知道是我还是一个错误:https//debbugs.gnu.org/cgi/bugreport.cgi? bug = 21582

我认为,如果有一个“备忘单”可以供初学者或像我这样的业余爱好者(不是行业上的程序员)使用,那么更多的人将倾向于构建自己的Emacs。


我认为您可以通过多种方式在Windows上构建Emacs(即,很有可能是MingW / MS VCC,但也可能是clang。您可以在此处查找所需的库列表(有很多)emacswiki.org/emacs / BuildingEmacsWithMinGW,但是此信息的日期肯定是过时的(很可能是十年左右!)
wvxvw 2015年

对于64位版本,可以在sourceforge.net/p/emacsbinw64/wiki/…上从emacsbinw64获得良好的记录-它使用MSYS2和MinGW-w64。也许nt / INSTALL注释也应该更新为包括此选项?
Brian Burns 2015年

@ bburns.km-谢谢您的链接。我想知道如何构建64位,但没有空闲时间来投入无数时间来解决它。将来,我一定会检查该链接,以了解它是否是第1、2、3步,还是仅仅是大纲,高级程序员知道如何填补这些空白。像nt / INSTALL这样的指令对于像我这样的新手来说基本上是没有用的-对程序员而言这是有意义的,但对我而言实际上没有任何意义-而我的5个简单步骤的确是任何人真正的1、2、3可以按照。
法律列表

@lawlist是的,这是一个很好的文章-我在一两年前尝试过进行32位构建,但是出了点问题和/或迷失了它-就像您说的那样,对于不习惯从源头构建事物的人来说,这相当复杂。但是emacsbinw64指令更简单,并且运行良好-仅花费几个小时就可以完成所有工作。我想我会在devlist上询问有关更新nt / INSTALL文档的问题-可能有32位和64位部分。我开始写文档,但是意识到它并没有给emacsbinw64指令增加太多,但是可以在其中使用。
Brian Burns

Answers:


9

建议用户阅读../emacs/nt/INSTALLEmacs源代码中包含的全部内容。


快速入门-5个简单步骤

该答案已经在WindowsXP--SP3上进行了测试。安装路径将需要根据用户的个人喜好进行调整。在此示例中:

  • 桌面是: C:\Documents and Settings\lawlist\Desktop

  • git安装: C:\git

  • MinGW安装: C:\mingw

  • Emacs master分支的git下载位置是: C:\Documents and Settings\lawlist\Desktop\emacs

  • Emacs安装的目标是: C:\Documents and Settings\lawlist\Desktop\trunk

步骤1:安装,git并确保在安装过程中选择“按原样签出,按原样提交”:

https://git-scm.com/download/win

Git-2.5.3-32位.exe

运行安装程序。

下一个

下一个

标准安装目录为C:\Program Files\Git,但我改为选择: c:\git

选择组件:默认是可以的,但是我什么也没选择。

选择开始菜单文件夹:默认是可以的,我选择不创建文件夹。

调整PATH环境:默认是可以的:仅从Bash使用Git。

;; 对于下一部分,请密切注意非默认设置-请参阅Emacs错误#21582。

配置行尾转换:Emacs需要非默认设置为“按原样签出,按原样提交”

配置终端模拟器以与Git Bash一起使用:默认是可以的:使用MinTTY(MSys2的默认终端)

配置实验性性能调整:我选择“不启用文件系统缓存”。

完成[如果需要,请查看发行说明]

注意:( autogen.sh以及某些第三方程序)需要设置gitPATH,以便可以在不使用绝对路径的情况下调用可执行文件。这个答案的作者个人偏爱使用绝对路径而不修改PATH。但是,大多数人似乎更喜欢为当前和将来的会话修改PATH。例如,在Windows XP上,可以在“控制面板” /“系统属性” /“高级”选项卡/“环境变量”按钮中设置PATH,关于用户应该设置用户变量还是系统,似乎有两(2)个视图/观点。变量-路径之间用分号分隔,没有空格。该答案仅使用export下面所述的设置会话持续时间的PATH 。Emacs autogen.sh寻找git PATH上的命令,并抱怨是否找不到它。

步骤2:安装MinGW

http://www.mingw.org/wiki/Getting_Started

mingw-get-setup.exe

c:\mingw\bin\mingw-get install mingw32-base

c:\mingw\bin\mingw-get install msys-base

c:\mingw\bin\mingw-get install autoconf

c:\mingw\bin\mingw-get install automake

c:\mingw\bin\mingw-get install msys-coreutils

c:\mingw\bin\mingw-get remove mingw32-libiconv

c:\mingw\bin\mingw-get install "libiconv=1.13.1-1"

c:\mingw\msys\1.0\msys.bat

mount c:/mingw /mingw

步骤3:下载以下ezwinports压缩包并解压缩到根mingw目录。

https://sourceforge.net/projects/ezwinports/files/

;; 将以下所有ezwinports软件包解压缩到中c:/mingw,覆盖所有重复项。

cairo-1.12.16-w32-bin.zip

gdk-pixbuf-2.30.2-w32-bin.zip

giflib-5.1.0-w32-bin.zip

glib-2.38.2-w32-bin.zip

gnutls-3.3.11-w32-bin.zip

jpeg-v9a-w32-bin.zip

libpng-1.6.12-w32-bin.zip

librsvg-2.40.1-2-w32-bin.zip

libtasn1-4.2-w32-bin.zip

libxml2-2.7.8-w32-bin.zip

libXpm-3.5.11-2-w32-bin.zip

nettle-2.7.1-w32-bin.zip

p11-kit-0.9-w32-bin.zip

pixman-0.32.4-w32-bin.zip

pkg-config-0.28-w32-bin.zip

tiff-4.0.3-w32-bin.zip

zlib-1.2.8-2-w32-bin.zip

步骤4:使用git-bashShell 下载最新的Emacs master分支源文件。

c:\git\git-bash.exe

cd /c/docume~1/lawlist/desktop/

git clone -b master git://git.sv.gnu.org/emacs.git

exit

步骤5:构建Emacs master分支,完成后复制.dll文件。

;; 打开通用命令提示符

c:\mingw\msys\1.0\msys.bat

export PATH=$PATH:/c/git/bin

cd /c/docume~1/lawlist/desktop/emacs

./autogen.sh

./configure --prefix=/c/docume~1/lawlist/desktop/trunk

make

make install

;; copy the following files to the `/bin` directory where `emacs.exe` is located.

cp /c/mingw/bin/libXpm-noX4.dll /c/docume~1/lawlist/desktop/trunk/bin/libXpm-noX4.dll

cp /c/mingw/bin/libpng16-16.dll /c/docume~1/lawlist/desktop/trunk/bin/libpng16-16.dll

cp /c/mingw/bin/libtiff-5.dll /c/docume~1/lawlist/desktop/trunk/bin/libtiff-5.dll

cp /c/mingw/bin/libjpeg-9.dll /c/docume~1/lawlist/desktop/trunk/bin/libjpeg-9.dll

cp /c/mingw/bin/libgif-7.dll /c/docume~1/lawlist/desktop/trunk/bin/libgif-7.dll

cp /c/mingw/bin/librsvg-2-2.dll /c/docume~1/lawlist/desktop/trunk/bin/librsvg-2-2.dll

cp /c/mingw/bin/libgdk_pixbuf-2.0-0.dll /c/docume~1/lawlist/desktop/trunk/bin/libgdk_pixbuf-2.0-0.dll

cp /c/mingw/bin/libglib-2.0-0.dll /c/docume~1/lawlist/desktop/trunk/bin/libglib-2.0-0.dll

cp /c/mingw/bin/libgobject-2.0-0.dll /c/docume~1/lawlist/desktop/trunk/bin/libgobject-2.0-0.dll

cp /c/mingw/bin/libxml2-2.dll /c/docume~1/lawlist/desktop/trunk/bin/libxml2-2.dll

cp /c/mingw/bin/zlib1.dll /c/docume~1/lawlist/desktop/trunk/bin/zlib1.dll

将的全部内容解压缩gnutls-3.3.11-w32-bin.zipC:\Documents and Settings\lawlist\Desktop\trunk


手动安装 -MinGW / MSYS / EZwinports

对于那些喜欢手动安装MinGW / MSYS / EZwinports的冒险者,以下是Windows XP上该作者使用的文件,该文件在默认启用以下配置选项的情况下创建成功的32位版本。设置和配置会因个人用户的个人喜好而异,超出了此答案的范围。

Configured for 'i686-pc-mingw32'.
Where should the build process find the source code?    .
What compiler should emacs be built with?               gcc -std=gnu99  -g3 -O 2 -gdwarf-2
Should Emacs use the GNU version of malloc?             no
  (The GNU allocators don't work with this system configuration.)
Should Emacs use a relocating allocator for buffers?    no
Should Emacs use mmap(2) for buffer allocation?         yes
What window system should Emacs use?                    w32
What toolkit should Emacs use?                          none
Where do we find X Windows header files?                NONE
Where do we find X Windows libraries?                   NONE
Does Emacs use -lXaw3d?                                 no
Does Emacs use -lXpm?                                   yes
Does Emacs use -ljpeg?                                  yes
Does Emacs use -ltiff?                                  yes
Does Emacs use a gif library?                           yes
Does Emacs use a png library?                           yes
Does Emacs use -lrsvg-2?                                yes
Does Emacs use cairo?                                   no
Does Emacs use imagemagick?                             no
Does Emacs support sound?                               yes
Does Emacs use -lgpm?                                   no
Does Emacs use -ldbus?                                  no
Does Emacs use -lgconf?                                 no
Does Emacs use GSettings?                               no
Does Emacs use a file notification library?             yes (w32)
Does Emacs use access control lists?                    yes
Does Emacs use -lselinux?                               no
Does Emacs use -lgnutls?                                yes
Does Emacs use -lxml2?                                  yes
Does Emacs use -lfreetype?                              no
Does Emacs use -lm17n-flt?                              no
Does Emacs use -lotf?                                   no
Does Emacs use -lxft?                                   no
Does Emacs directly use zlib?                           yes
Does Emacs use toolkit scroll bars?                     yes

EZWINPORTS

cairo-1.12.16-w32-bin.zip
gdk-pixbuf-2.30.2-w32-bin.zip
giflib-5.1.0-w32-bin.zip
glib-2.38.2-w32-bin.zip
gnutls-3.3.11-w32-bin.zip
jpeg-v9a-w32-bin.zip
libXpm-3.5.11-2-w32-bin.zip
libpng-1.6.12-w32-bin.zip
librsvg-2.40.1-2-w32-bin.zip
libtasn1-4.2-w32-bin.zip
libxml2-2.7.8-w32-bin.zip
nettle-2.7.1-w32-bin.zip
p11-kit-0.9-w32-bin.zip
pixman-0.32.4-w32-bin.zip
pkg-config-0.28-w32-bin.zip
tiff-4.0.3-w32-bin.zip
zlib-1.2.8-2-w32-bin.zip

明格

autoconf-10-1-mingw32-bin.tar.lzma
autoconf-10-1-mingw32-lic.tar.lzma
autoconf2.1-2.13-4-mingw32-bin.tar.lzma
autoconf2.5-2.68-1-mingw32-bin.tar.lzma
automake-4-1-mingw32-bin.tar.lzma
automake-4-1-mingw32-lic.tar.lzma
automake1.10-1.10.2-1-mingw32-bin.tar.lzma
automake1.11-1.11.1-1-mingw32-bin.tar.lzma
automake1.4-1.4p6-1-mingw32-bin.tar.lzma
automake1.5-1.5-1-mingw32-bin.tar.lzma
automake1.6-1.6.3-1-mingw32-bin.tar.lzma
automake1.7-1.7.9-1-mingw32-bin.tar.lzma
automake1.8-1.8.5-1-mingw32-bin.tar.lzma
automake1.9-1.9.6-3-mingw32-bin.tar.lzma
binutils-2.25.1-1-mingw32-bin.tar.xz
gcc-core-4.8.1-4-mingw32-bin.tar.lzma
gcc-core-4.8.1-4-mingw32-dev.tar.lzma
gcc-core-4.8.1-4-mingw32-dll.tar.lzma
gcc-core-4.8.1-4-mingw32-lic.tar.lzma
gdb-7.6.1-1-mingw32-bin.tar.lzma
gmp-5.1.2-1-mingw32-dll.tar.lzma
libcharset-1.13.1-1-mingw32-dll-1.tar.lzma
libiconv-1.13.1-1-mingw32-bin.tar.lzma
libiconv-1.13.1-1-mingw32-dev.tar.lzma
libiconv-1.13.1-1-mingw32-dll-2.tar.lzma
libiconv-1.13.1-1-mingw32-doc.tar.lzma
libiconv-1.13.1-1-mingw32-lic.tar.lzma
libintl-0.17-1-mingw32-dll-8.tar.lzma
libmpc-1.0.2-mingw32-dll-3.tar.xz
make-3.82.90-2-mingw32-cvs-20120902-bin.tar.lzma
mingwrt-3.21.1-mingw32-dev.tar.xz
mingwrt-3.21.1-mingw32-dll.tar.xz
mpfr-3.1.2-2-mingw32-dll.tar.lzma
pthreads-w32-2.9.1-1-mingw32-dll.tar.lzma
w32api-3.17-2-mingw32-dev.tar.lzma

MSYS

bash-3.1.23-1-msys-1.0.18-bin.tar.xz
bzip2-1.0.6-1-msys-1.0.17-bin.tar.lzma
coreutils-5.97-3-msys-1.0.13-bin.tar.lzma
coreutils-5.97-3-msys-1.0.13-doc.tar.lzma
coreutils-5.97-3-msys-1.0.13-ext.tar.lzma
coreutils-5.97-3-msys-1.0.13-lang.tar.lzma
coreutils-5.97-3-msys-1.0.13-lic.tar.lzma
diffutils-2.8.7.20071206cvs-3-msys-1.0.13-bin.tar.lzma
dos2unix-7.2.3-1-msys-1.0.18-bin.tar.lzma
file-5.04-1-msys-1.0.13-bin.tar.lzma
findutils-4.4.2-2-msys-1.0.13-bin.tar.lzma
gawk-3.1.7-2-msys-1.0.13-bin.tar.lzma
grep-2.5.4-2-msys-1.0.13-bin.tar.lzma
gzip-1.3.12-2-msys-1.0.13-bin.tar.lzma
less-436-2-msys-1.0.13-bin.tar.lzma
libbz2-1.0.6-1-msys-1.0.17-dll-1.tar.lzma
libcrypt-1.1_1-3-msys-1.0.13-dll-0.tar.lzma
libexpat-2.0.1-1-msys-1.0.13-dll-1.tar.lzma
libgdbm-1.8.3-3-msys-1.0.13-dll-3.tar.lzma
libiconv-1.14-1-msys-1.0.17-dll-2.tar.lzma
libintl-0.18.1.1-1-msys-1.0.17-dll-8.tar.lzma
liblzma-5.0.3-1-msys-1.0.17-dll-5.tar.lzma
libmagic-5.04-1-msys-1.0.13-dll-1.tar.lzma
libregex-1.20090805-2-msys-1.0.13-dll-1.tar.lzma
libtermcap-0.20050421_1-2-msys-1.0.13-dll-0.tar.lzma
libxml2-2.7.6-1-msys-1.0.13-dll-2.tar.lzma
m4-1.4.16-2-msys-1.0.17-bin.tar.lzma
make-3.81-3-msys-1.0.13-bin.tar.lzma
msysCORE-1.0.18-1-msys-1.0.18-bin.tar.lzma
msysCORE-1.0.18-1-msys-1.0.18-doc.tar.lzma
msysCORE-1.0.18-1-msys-1.0.18-ext.tar.lzma
msysCORE-1.0.18-1-msys-1.0.18-lic.tar.lzma
perl-5.8.8-1-msys-1.0.17-bin.tar.lzma
sed-4.2.1-2-msys-1.0.13-bin.tar.lzma
tar-1.23-1-msys-1.0.13-bin.tar.lzma
termcap-0.20050421_1-2-msys-1.0.13-bin.tar.lzma
texinfo-4.13a-2-msys-1.0.13-bin.tar.lzma
xz-5.0.3-1-msys-1.0.17-bin.tar.lzma
zlib-1.2.7-1-msys-1.0.17-dll.tar.lzma

1

去年,我曾尝试在emacs / nt / INSTALL中使用32位版本的指令,但是出了点问题(确切的我不记得是什么),所以最近我尝试了emacsbinw64的指令 -效果很好,而且获得必要的库也更简单。它使用MSYS2和MinGW-w64进行64位构建-emacsbinw64项目在https://sourceforge.net/projects/emacsbinw64/files/提供了二进制文件。

因此,我按照大纲概述了一些说明,并得到了Eli Zaretski和作者Chris Zheng的反馈-完整版本位于http://git.savannah.gnu.org/cgit/emacs.git/plain/nt/INSTALL .W64?h = emacs-25(也包括从发行版tarball进行构建)。

在Intel i3和高速互联网连接-YMMV上总共花费了大约90分钟。请注意,在Windows上进行构建的大部分工作只是设置构建环境。


要求

所需的总空间为3GB:带有完整存储库的MSYS2 / MinGW-w64为1.8GB,Emacs为1.2GB。

下载并安装MinGW-w64和MSYS2

https://sourceforge.net/projects/msys2/files/Base/x86_64下载x86_64版本的MSYS2(即msys2-x86_64-.exe)。

运行此文件以将MSYS2安装在您的首选目录中,例如默认的C:\ msys64 -这还将安装MinGW-w64。请注意,包含空格的目录名称可能会导致问题。

然后,您需要将以下目录添加到Windows PATH环境变量中:

c:\msys64\usr\bin;c:\msys64\mingw64\bin

您可以通过控制面板/系统和安全性/系统/高级系统设置/环境变量/编辑路径来执行此操作。

将这些目录添加到PATH可以告诉Emacs在哪里找到需要运行的DLL,以及一些可选命令,例如grep和find。这些命令也将在Windows控制台上可用。

下载并安装必要的软件包

在您的MSYS2目录中运行msys2_shell.bat,您将看到一个BASH窗口打开。

在BASH提示符中,使用以下命令安装必要的软件包(您可以使用Shift + Insert将其复制并粘贴到外壳中):

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

现在,您已经有了Emacs的完整构建环境。

安装Git(可选)并禁用autocrlf

如果您的系统上还没有Git,则可以使用以下命令将其安装在MSYS2环境中:

pacman -S git

Git的autocrlf功能可能会干扰配置文件,因此最好通过运行以下命令来禁用此功能:

git config core.autocrlf false

获取Emacs源代码

要下载Git存储库,请执行以下操作-将Emacs源放入C:\ emacs \ emacs-25:

mkdir /c/emacs
cd /c/emacs
git clone git://git.sv.gnu.org/emacs.git emacs-25

编译Emacs

现在,您可以使用autogen来构建和安装Emacs,进行配置,进行安装。

首先,我们需要切换到MinGW-w64环境。退出MSYS2 BASH控制台并在C:\ msys64文件夹中运行mingw64_shell.bat,然后将cd返回到您的Emacs源目录,例如:

cd /c/emacs/emacs-25

运行自动生成

如果要构建开发源,请运行autogen生成configure脚本:

./autogen.sh

运行配置

现在,您可以运行configure,它将构建各种Makefile。

“ --prefix”选项指定生成的二进制文件的位置,“ make install”将使用该位置-在本示例中,我们将其设置为C:\ emacs \ emacs-25。如果未指定前缀,则文件将放置在C:\ msys64目录中的标准Unix目录中,但是不建议这样做。

还要注意,我们需要禁用Imagemagick,因为Emacs在Windows上尚不支持它。

PKG_CONFIG_PATH=/mingw64/lib/pkgconfig \
./configure --prefix=/c/emacs/emacs-25 --without-imagemagick

运行make

这将编译Emacs并生成可执行文件,并将它们放在src目录中:

make

为了加快过程,您可以尝试运行

make -jN

其中N是系统中的内核数-如果您的MSYS2 make支持并行执行,它将运行得更快。

运行make install

现在您可以运行“ make install”,它将把可执行文件和其他文件复制到配置步骤中指定的位置。这将创建bin,libexec,share和var目录:

make install

你也可以说

make install prefix=/c/somewhere

将它们安装在其他地方。

测试Emacs

要进行测试,请运行

./bin/runemacs.exe -Q

如果一切顺利,您将拥有一个新的64位版本的Emacs。

捷径

要创建运行新Emacs的快捷方式,请右键单击要放置它的位置,例如“桌面”,选择“新建/快捷方式”,然后在新Emacs的bin文件夹中选择runemacs.exe,并为其命名。

您可以通过右键单击生成的快捷方式来设置任何命令行选项,选择“属性”,然后将任何选项添加到“目标”命令,例如--debug-init。

学分

感谢Chris Zheng为emacsbinw64项目使用的原始构建大纲,该项目位于https://sourceforge.net/p/emacsbinw64/wiki/Build%20guideline%20for%20MSYS2-MinGW-w64%20system/

执照

该文件是GNU Emacs的一部分。

GNU Emacs是免费软件:您可以根据自由软件基金会发布的GNU通用公共许可证的条款(许可证的版本3)或(可选)任何更高版本来重新分发和/或修改它。

发行GNU Emacs的目的是希望它会有用,但没有任何担保;甚至没有对适销性或特定用途适用性的暗示保证。有关更多详细信息,请参见GNU通用公共许可证。

您应该已经收到了GNU通用公共许可证以及GNU Emacs的副本。如果没有,请参阅http://www.gnu.org/licenses/


考虑完成构建后,考虑添加一个步骤以复制需要直接与Emacs可执行文件放置在.dll文件中的所有.dll文件,这样Emacs无需依赖系统范围内定义的路径来查找这些文件文件。另外,可能有必要将gnutls的可执行文件复制到Emacs可执行文件目录中。最后的步骤可能与替代答案中的Emacs 32构建非常相似。
法律列表

是的,原始说明是用这种方式编写的,但是Eli认为使用PATH更好-list.gnu.org/archive/html/bug-gnu-emacs/2015-12/msg01476.html。但是,这是另一种选择-如果您想这样做,则可以将C:\ msys64 \ mingw64 \ bin中的所有DLL复制到emacs bin文件夹中-它们只有32MB- cp /c/msys64/mingw64/bin/*.dll bin。我对gnutls不太了解-有没有简单的方法可以测试出来?
布莱恩·伯恩斯

从最一般的意义上讲,实际上并没有将其用于电子邮件或其他用途,该功能是通过gnutls-available-p 我理解简单性的功能(仅指系统路径)进行的,但有时人们可能想在另一台计算机上使用Emacs构建,他们会想知道为什么图像和其他东西不能立即使用。有很多人问为什么在常规缓冲区中pdf文件看起来像乱码(即,由于缺乏png支持),或者为什么他们不能在AUCTeX中进行文档查看或预览(原因相同)。
法律列表

好的,gnutls-available-p仅使用PATH设置返回t,所以我认为它现在可以正常工作-我将提交带有替代方法的补丁程序来复制DLL,如果需要的话,还可以复制gnutls exe,并在此处进行更新后来。
布莱恩·伯恩斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.