Emacs 22.3无法在Ubuntu 12.04上编译

时间:2013-04-20 20:17:38

标签: emacs makefile ubuntu-12.04

我从

下载了emacs 22.3

http://ftp.gnu.org/pub/gnu/emacs/emacs-22.3.tar.gz

到我的Ubuntu 12.04.2 LTS桌面上,编译/ make不起作用。

配置似乎工作正常。

很早就失败了:在子目录lib-src中,makefile的第148行出现问题。它确实看起来像一个问题:

ALL_CFLAGS = -D_BSD_SOURCE -DHAVE_CONFIG_H
          -I. -I../src -I${srcdir} -I${srcdir}/../src ${LDFLAGS} ${CPPFLAGS} ${CFLAGS}

第147行和第148行:第148行应该是第147行的延续。它以标签开头。在第147行的末尾没有\。我放入一个并再次尝试。我在第150行得到了一个错误。我放了另一个\。几行后事情变得更加严重,缺少\实际上导致了一些不是语法错误但却以更微妙的方式中断的东西。

我不应该编辑Makefile(我可以说,他们的权限是只读的;-))。我究竟做错了什么?我可以坚持下去,但如果我可以改为,提供一个标志,例如在emacs-22.3-makefile兼容模式下运行,这样会好得多。

[对于那些想知道“为什么”的人 - 我有一些我工作需要的脚本,他们从未在emacs中工作过> = 23;在我的旧机器上我刚刚编译了emacs22我没有问题,但是在这台新的Ubuntu机器上我没有emacs22而在ubuntu 12.04存储库中没有emacs22所以我有点绝望]


好的,所以有人建议我试过

$ CPPFLAGS="-P" ./configure

这解决了lib-src中回车符/制表符的所有问题。但实际上它只是让我到达我设法手动获取的地步:

cd src; make all  \
          CC='gcc' CFLAGS='-g -O2 -Wno-pointer-sign ' CPPFLAGS='-D_BSD_SOURCE  -P' \
          LDFLAGS='-Wl,-znocombreloc' MAKE='make'
make[1]: Entering directory `/home/buzzard/local/emacs-22.3/src'
gcc -c -D_BSD_SOURCE  -P -Demacs -DHAVE_CONFIG_H   -I. -I/home/buzzard/local/emacs-22.3/src -D_BSD_SOURCE  -g -O2 -Wno-pointer-sign  pre-crt0.c
make[1]: *** No rule to make target `/usr/lib/crt1.o', needed by `temacs'. Stop.
make[1]: Leaving directory `/home/buzzard/local/emacs-22.3/src'
make: *** [src] Error 2
嗯......如果我知道自己在做什么,我会张贴其他的东西,但说实话,我从来不理解make。我一直希望它能起作用......

1 个答案:

答案 0 :(得分:4)

新版gcc版本存在问题。请参阅修复此内容的Emacs仓库中的此更改:

http://git.savannah.gnu.org/gitweb/?p=emacs.git;a=commit;h=16abbbf

您应该能够使用

解决问题
CPPFLAGS="-P" ./configure

要避免找不到/usr/lib/crt1.o的问题,您必须编辑src/Makefile(您可能首先需要chmod a+rw src/Makefile进行编辑)。在较新的系统上,crt1.o不在/usr/lib但在/usr/lib/<arch directory>/中,因此例如它可能在/usr/lib/i386-linux-gnu中(您的可能不同!)。然后在src/Makefile中更改行

STARTFILES = pre-crt0.o /usr/lib/crt1.o /usr/lib/crti.o

STARTFILES = pre-crt0.o /usr/lib/i386-linux-gnu/crt1.o /usr/lib/i386-linux-gnu/crti.o

LIBES = ... all kinds of stuff ...  /usr/lib/crtn.o $(GNULIB_VAR)

LIBES = ... all kinds of stuff ... /usr/lib/i386-linux-gnu/crtn.o $(GNULIB_VAR)

同样,您的目录可能会有所不同!