我正在尝试编写一个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)
. 这里发生了什么?