2

我从下载 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 行遇到错误。我输入了另一个 \ 。几行之后事情变得更严重了,缺少 \ 实际上导致的事情不是语法错误,而是以更微妙的方式使 make break 发生。

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

[对于那些想知道“为什么”的人——我有一些我的工作需要的脚本,它们从未在 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

嗯...如果我知道自己在做什么,我会发布其他零碎的东西,但老实说,我从来没有理解过制作。我一直只是希望它会工作......

4

1 回答 1

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 不是 in/usr/lib而是 in /usr/lib/<arch directory>/,因此例如它可能在 in /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)

同样,您的目录可能不同!

于 2013-04-20T20:38:41.677 回答