目标`自动加载';在Cygwin中生成Emacs时失败
我正在尝试使用Cyqwin在64位Windows 7上构建Emacs: Emacs 23.3或23.4 CYGWIN_NT-6.1-WOW64 1.7.11(0.260/5/3)2012-02-24 14:05 i686 CYGWIN 来自/配置日志的一些信息:目标`自动加载';在Cygwin中生成Emacs时失败,emacs,makefile,cygwin,emacs23,recipe,Emacs,Makefile,Cygwin,Emacs23,Recipe,我正在尝试使用Cyqwin在64位Windows 7上构建Emacs: Emacs 23.3或23.4 CYGWIN_NT-6.1-WOW64 1.7.11(0.260/5/3)2012-02-24 14:05 i686 CYGWIN 来自/配置日志的一些信息: What compiler should emacs be built with? gcc -g -O2 -Wdeclarati What operating system and machine des
What compiler should emacs be built with?
gcc -g -O2 -Wdeclarati
What operating system and machine description files should Emacs use?
`s/cygwin.h' and `m/intel386.h'
我能够毫无问题地创建Makefile。但是,如果我运行make过程,它会生成几分钟,然后在某个点上,它会被卡住2分钟,然后产生错误:
Makefile:149: recipe for target `autoloads' failed
make[2]: *** [autoloads] Interrupt
Makefile:198: recipe for target `/cygdrive/c/emacs-23.3/src/../lisp/loaddefs.el' failed
make[1]: *** [/cygdrive/c/emacs-23.3/src/../lisp/loaddefs.el] Interrupt
Makefile:339: recipe for target `src' failed
make: *** [src] Interrupt
在这两种情况下(Emacs 23.3和23.4),Makefile:149引用Emacs\lisp文件夹中Makefile的相同部分:
149 autoloads: $(LOADDEFS) doit
150 , chmod +w $(lisp)/ps-print.el $(lisp)/emulation/tpu-edt.el \
151 $(lisp)/emacs-lisp/cl-loaddefs.el $(lisp)/mail/rmail.el \
152 $(lisp)/dired.el $(lisp)/ibuffer.el
153 wd=$(lisp); $(setwins_almost); \
154 echo Directories: $$wins; \
155 $(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
在版本23.3中。生成*.el文件的自动加载时,建筑被卡住:
Generating autoloads for progmodes/cc-mode.el...
Generating autoloads for progmodes/cc-mode.el...done
Generating autoloads for progmodes/cc-styles.el...
Generating autoloads for progmodes/cc-styles.el...done
Generating autoloads for progmodes/cc-vars.el...
Generating autoloads for progmodes/cc-vars.el...done
Generating autoloads for international/ccl.el...
Makefile:149: recipe for target `autoloads' failed
make[2]: *** [autoloads] Interrupt
在verison 23.4中,建筑在保存loaddefs时卡住:
make[2]: Entering directory `/cygdrive/c/emacs-23.4/lisp'
chmod +w /cygdrive/c/emacs-23.4/lisp/ps-print.el /cygdrive/c/emacs-23.4/lisp/emulation/tpu-edt.el \
/cygdrive/c/emacs-23.4/lisp/emacs-lisp/cl-loaddefs.el /cygdrive/c/emacs-23.4/lisp/mail/rmail.el \
/cygdrive/c/emacs-23.4/lisp/dired.el /cygdrive/c/emacs-23.4/lisp/ibuffer.el
wd=/cygdrive/c/emacs-23.4/lisp; subdirs=`(cd $wd; find . -type d -print)`; for file in $subdirs; do case $file in */Old | */RCS | */CVS | */CVS/* | */.* | */.*/* | */=* | */obsolete | */term ) ;; *) wins="$wins $wd/$file" ;; esac; done ; \
echo Directories: $wins; \
EMACSLOADPATH=/cygdrive/c/emacs-23.4/lisp LC_ALL=C ../src/bootstrap-emacs.exe -batch --no-site-file --multibyte -l autoload --eval '(setq generated-autoload-file "/cygdrive/c/emacs-23.4/lisp/loaddefs.el")' -f batch-update-autoloads $wins
Directories: /cygdrive/c/emacs-23.4/lisp/. /cygdrive/c/emacs-23.4/lisp/./calc /cygdrive/c/emacs-23.4/lisp/./calendar /cygdrive/c/emacs-23.4/lisp/./cedet /cygdrive/c/emacs-23.4/lisp/./cedet/ede /cygdrive/c/emacs-23.4/lisp/./cedet/semantic /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/analyze /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/bovine /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/decorate/cygdrive/c/emacs-23.4/lisp/./cedet/semantic/symref /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/wisent /cygdrive/c/emacs-23.4/lisp/./cedet/srecode /cygdrive/c/emacs-23.4/lisp/./emacs-lisp /cygdrive/c/emacs-23.4/lisp/./emulation /cygdrive/c/emacs-23.4/lisp/./erc /cygdrive/c/emacs-23.4/lisp/./eshell /cygdrive/c/emacs-23.4/lisp/./gnus /cygdrive/c/emacs-23.4/lisp/./international /cygdrive/c/emacs-23.4/lisp/./language /cygdrive/c/emacs-23.4/lisp/./mail /cygdrive/c/emacs-23.4/lisp/./mh-e /cygdrive/c/emacs-23.4/lisp/./net /cygdrive/c/emacs-23.4/lisp/./nxml /cygdrive/c/emacs-23.4/lisp/./org /cygdrive/c/emacs-23.4/lisp/./play /cygdrive/c/emacs-23.4/lisp/./progmodes /cygdrive/c/emacs-23.4/lisp/./textmodes /cygdrive/c/emacs-23.4/lisp/./url
Saving file /cygdrive/c/emacs-23.4/lisp/loaddefs.el...
Makefile:149: recipe for target `autoloads' failed
make[2]: *** [autoloads] Interrupt
有人知道我如何修复这个bug吗?错误的C编译器?更改生成文件?将“make”与某些参数一起使用
谢谢你的帮助或推荐
***********第2部分**************
好的,下面是根据您的建议继续进行的步骤:
一,#
自动加载
不可能,因为此子零件位于子生成文件中,因此会产生错误:
$ make autoloads
chmod +w /cygdrive/c/emacs-23.4/lisp/ps-print.el /cygdrive/c/emacs-23.4/lisp/emulation/tpu-edt.el \
/cygdrive/c/emacs-23.4/lisp/emacs-lisp/cl-loaddefs.el /cygdrive/c/emacs-23.4/lisps/mail/rmail.el \
/cygdrive/c/emacs-23.4/lisp/dired.el /cygdrive/c/emacs-23.4/lisp/ibuffer.el
wd=/cygdrive/c/emacs-23.4/lisp; subdirs=`(cd $wd; find . -type d -print)`; for file in $subdirs; do case $file in */Old | */RCS | */CVS | */CVS/* | */.* | */.*/* | */=* | */obsolete | */term ) ;; *) wins="$wins $wd/$file" ;; esac; done; \
echo Directories: $wins; \
EMACSLOADPATH=/cygdrive/c/emacs-23.4/lisp LC_ALL=C ../src/emacs -batch --no-site-file --multibyte -l autoload --eval '(setq generated-autoload-file "/cygdrive/c/emacs-23.4/lisp/loaddefs.el")' -f batch-update-autoloads $wins
Directories: /cygdrive/c/emacs-23.4/lisp/. /cygdrive/c/emacs-23.4/lisp/./calc /cygdrive/c/emacs-23.4/lisp/./calendar /cygdrive/c/emacs-23.4/lisp/./cedet /cygdrive/c/emacs-23.4/lisp/./cedet/ede /cygdrive/c/emacs-23.4/lisp/./cedet/semantic /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/analyze /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/bovine /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/decorate /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/symref /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/wisent /cygdrive/c/emacs-23.4/lisp/./cedet/srecode /cygdrive/c/emacs-23.4/lisp/./emacs-lisp /cygdrive/c/emacs-23.4/lisp/./emulation /cygdrive/c/emacs-23.4/lisp/./erc /cygdrive/c/emacs-23.4/lisp/./eshell /cygdrive/c/emacs-23.4/lisp/./gnus /cygdrive/c/emacs-23.4/lisp/./international /cygdrive/c/emacs-23.4/lisp/./language /cygdrive/c/emacs-23.4/lisp/./mail /cygdrive/c/emacs-23.4/lisp/./mh-e /cygdrive/c/emacs-23.4/lisp/./net /cygdrive/c/emacs-23.4/lisp/./nxml /cygdrive/c/emacs-23.4/lisp/./org /cygdrive/c/emacs-23.4/lisp/./play /cygdrive/c/emacs-23.4/lisp/./progmodes /cygdrive/c/emacs-23.4/lisp/./textmodes /cygdrive/c/emacs-23.4/lisp/./url
/bin/sh: line 2: ../src/emacs: No such file or directory
Makefile:149: recipe for target `autoloads' failed
make: *** [autoloads] Error 127
如果我做错了什么,请纠正我
二,#
删除$(LOADDEFS)doit
不会改变结果
三,#
只运行第一部分
autoloads:
chmod +w $(lisp)/ps-print.el $(lisp)/emulation/tpu-edt.el \
$(lisp)/emacs-lisp/cl-loaddefs.el $(lisp)/mail/rmail.el \
$(lisp)/dired.el $(lisp)/ibuffer.el
在自动加载中无错误地解析
然而,20秒后,它冻结了一段时间,并产生了另一个错误
(此问题的描述如下)
四,#
要仅运行第二部分,请执行以下操作:
autoloads:
wd=$(lisp); $(setwins_almost); \
echo Directories: $$wins; \
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
因原点误差而加剧
五,#
如3所示运行自动加载,也可使用
wd=$(lisp);
自动加载没有错误,稍后与3中的错误相同#
六,#
使用wd=$(lisp)运行自动加载$(几乎赢了)代码>
自动加载没有错误,稍后与3中的错误相同#
七,#
还添加行
echo Directories: $$wins;
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
自动加载没有错误,稍后与3中的错误相同#
八,#
还添加行
echo Directories: $$wins;
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
当然是原点错误
第二个错误的描述(第3部分):
在此之前,会编译很多*.el文件
lisp/
# The src/Makefile.in has its own set of dependencies and when they decide
# that one Lisp file needs to be re-compiled, we had better recompile it as
# well, otherwise every subsequent make will again call us, until we finally
# end up deciding that yes, the file deserves recompilation.
# One option is to try and reproduce exactly the same dependencies here as
# we have in src/Makefile.in, but it turns out to be painful
# (e.g. src/Makefile.in may have a dependency for ../lisp/foo.elc where we
# only know of $(lisp)/foo.elc). So instead we provide a direct way for
# src/Makefile.in to rebuild a particular Lisp file, no questions asked.
# Use byte-compile-refresh-preloaded to try and work around some of
# the most common problems of not bootstrapping from a clean state.
1477 compile-onefile:
1478 @echo Compiling $(THEFILE)
1479 @# Use byte-compile-refresh-preloaded to try and work around some of
1480 @# the most common bootstrapping problems.
1481 @$(emacs) -l bytecomp -f byte-compile-refresh-preloaded $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $(THEFILE)
Makefile中有一个ELC文件列表:
## Explicitly list the .elc files, for the sake of parallel builds.
## http://lists.gnu.org/archive/html/bug-gnu-emacs/2008-05/msg00016.html
## This can probably be done more elegantly, but needs to be portable.
ELCFILES = \
$(lisp)/abbrev.elc \
$(lisp)/abbrevlist.elc \
$(lisp)/add-log.elc \
$(lisp)/align.elc \
$(lisp)/allout.elc \
$(lisp)/ansi-color.elc \
$(lisp)/apropos.elc \
$(lisp)/arc-mode.elc \
Makefile somewhy可能从*.elc文件重新创建*.el文件,但是所有*.el文件都已存在。好的,现在我有两个错误,而不是一个:)(当然,如果没有连接)
再次感谢您。生成的makefile很难维护和排除故障,但我们可以试试。该规则有两个先决条件和两个命令,第二个由四个串在一起的shell命令组成:
autoloads: $(LOADDEFS) doit
chmod +w $(lisp)/ps-print.el $(lisp)/emulation/tpu-edt.el \
$(lisp)/emacs-lisp/cl-loaddefs.el $(lisp)/mail/rmail.el \
$(lisp)/dired.el $(lisp)/ibuffer.el
wd=$(lisp); $(setwins_almost); \
echo Directories: $$wins; \
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
首先,我会尝试自动加载。如果出现同样的错误,我们可以继续,否则就公布结果
然后删除先决条件($(LOADDEFS)doit
),因为它们应该是幂等的,并且不受此规则操作的影响(除非生成文件确实复杂),然后重试
然后将命令拆分为较小的命令,然后逐个尝试。首先
autoloads:
chmod +w $(lisp)/ps-print.el $(lisp)/emulation/tpu-edt.el \
$(lisp)/emacs-lisp/cl-loaddefs.el $(lisp)/mail/rmail.el \
$(lisp)/dired.el $(lisp)/ibuffer.el
这应该没有错误。如果是这样的话,那么可能其中一个文件丢失了;发布结果。如果没有,则尝试不使用第一个命令的第二个命令:
autoloads:
wd=$(lisp); $(setwins_almost); \
echo Directories: $$wins; \
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
我预计这将产生与最初相同的错误;如果没有,只需将第一个命令放回并继续
现在分解第二个命令。我们不能忽略前面的部分,因为后面的部分依赖于它们,所以请先尝试
autoloads:
wd=$(lisp);
这应该行得通,除非lisp
有点奇怪(是的,是的,我知道)。然后
我敢打赌这就是它失败的地方,但如果不是,继续:
autoloads:
wd=$(lisp); $(setwins_almost); \
echo Directories: $$wins;
这应该行得通。然后
autoloads:
wd=$(lisp); $(setwins_almost); \
echo Directories: $$wins; \
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
几乎肯定会失败
第一次就够了。告诉我们结果,我们将继续。众所周知,生成的makefile很难维护和排除故障,但我们可以尝试。该规则有两个先决条件和两个命令,第二个由四个串在一起的shell命令组成:
autoloads: $(LOADDEFS) doit
chmod +w $(lisp)/ps-print.el $(lisp)/emulation/tpu-edt.el \
$(lisp)/emacs-lisp/cl-loaddefs.el $(lisp)/mail/rmail.el \
$(lisp)/dired.el $(lisp)/ibuffer.el
wd=$(lisp); $(setwins_almost); \
echo Directories: $$wins; \
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
首先,我会尝试自动加载。如果出现同样的错误,我们可以继续,否则就公布结果
然后删除先决条件($(LOADDEFS)doit
),因为它们应该是幂等的,并且不受此规则操作的影响(除非生成文件确实复杂),然后重试
然后将命令拆分为较小的命令,然后逐个尝试。首先
autoloads:
chmod +w $(lisp)/ps-print.el $(lisp)/emulation/tpu-edt.el \
$(lisp)/emacs-lisp/cl-loaddefs.el $(lisp)/mail/rmail.el \
$(lisp)/dired.el $(lisp)/ibuffer.el
这应该没有错误。如果是这样的话,那么可能其中一个文件丢失了;发布结果。如果没有,则尝试不使用第一个命令的第二个命令:
autoloads:
wd=$(lisp); $(setwins_almost); \
echo Directories: $$wins; \
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
我预计这将产生与最初相同的错误;如果没有,只需将第一个命令放回并继续
现在分解第二个命令。我们不能忽略前面的部分,因为后面的部分依赖于它们,所以请先尝试
autoloads:
wd=$(lisp);
这应该行得通,除非lisp
有点奇怪(是的,是的,我知道)。然后
我敢打赌这就是它失败的地方,但如果不是,继续:
autoloads:
wd=$(lisp); $(setwins_almost); \
echo Directories: $$wins;
这应该行得通。然后
autoloads:
wd=$(lisp); $(setwins_almost); \
echo Directories: $$wins; \
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
几乎肯定会失败
第一次就够了。告诉我们结果,我们将继续。我建议您尝试使用Emacs-24预测试,如果失败,则报告为错误。我建议您尝试使用Emacs-24预测试,如果失败,将其作为错误报告。+1只是为了一份简洁、彻底的错误报告。+1只是为了一份简洁、彻底的错误报告。首先,我要感谢您的关注,希望它能有所帮助。您的建议结果将添加到原始问题(第2部分)中。您还可以看到来自用户Stafan的另一个答案,我能够编译Emacs24。因此,如果你真的对什么是错误不感兴趣,就没有必要去寻找解决方案,因为解决这个问题已经没有用了。至少对我来说。不过,再次感谢你。首先,我要感谢你的关心,希望它能有所进展。您的建议结果将添加到原始问题(第1部分)中