目标`自动加载';在Cygwin中生成Emacs时失败

目标`自动加载';在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

我正在尝试使用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 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部分)中