我正在尝试编写一个makefile片段来将文件编译.el为.elc文件。我有以下片段:
.el.elc:
$(EMACS) -q -Q --batch \
--eval "(progn
(setq load-path (cons \"$(abs_srcdir)\" load-path))
(setq load-path (cons nil load-path))
(defun byte-compile-dest-file (f) \"$@\")
(condition-case nil
(byte-compile-file \"$<\")
(error (kill-emacs 1))))"
(我已经格式化了演示文稿的片段,make可能不喜欢这样布局。)
$(abs_srcdir)定义正确,但我有两个问题:
首先:目录布局如下:
+- foo.el <- foo.el lives in $(abs_srcdir)
+- _build/
++- bar.el
++- Makefile
(也就是说,一个 VPATH 构建foo.el在 srcdir 中,我正在尝试构建_build。)
如果bar.el依赖于foo.el(via(require 'foo)和(provide 'foo)),则尝试编译bar.elc失败并出现以下错误:
In toplevel form:
../bar.el:1:1:Error: Cannot open load file: foo
这让我觉得很奇怪,因为我以为我在$(abs_srcdir)欺骗load-path。发生了什么事?
第二个问题是,即使发生这种情况,emacs也会以状态 0 退出,尽管我努力将(byte-compile-file)调用包装在(condition-case). 这里发生了什么?