2012-07-08 17 views
0

我試圖寫一個makefile片斷編譯.el文件.elc文件錯誤。我有以下片段:(我已經格式化的演示片斷,make可能會不喜歡他提出了這樣)捕捉來自字節編譯的文件在批處理模式下

.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) \"[email protected]\") 
           (condition-case nil 
            (byte-compile-file \"$<\") 
            (error (kill-emacs 1))))" 

$(abs_srcdir)被正確定義,但我有兩個問題:

首先:藉助目錄佈局類似如下:

+- foo.el <- foo.el lives in $(abs_srcdir) 
+- _build/ 
++- bar.el 
++- Makefile 

(即,VPATH構建其中。個生活在SRCDIR,我試圖建立在_build

如果bar.el取決於foo.el(通過(require 'foo)(provide 'foo)),嘗試編譯bar.elc失敗與錯誤:

In toplevel form: 
../bar.el:1:1:Error: Cannot open load file: foo 

這給我的印象作爲奇怪,因爲以爲我是consing $(abs_srcdir)load-path。發生了什麼?

第二個問題是,即使發生這種情況,emacs仍以狀態0退出,儘管我努力將(byte-compile-file)呼叫換成(condition-case)。這裏發生了什麼?

+0

'(setq load-path(cons nil load-path))'將當前目錄添加到'load-path'。見http://www.gnu.org/software/emacs/manual/html_node/emacs/Lisp-Libraries。html - 「加載路徑中的列表條目也可以有特殊值'nil',它代表當前的默認目錄。」 – 2012-07-12 21:37:34

+0

我還應該補充說,由於某些原因,無論是否爲我工作,我不得不''(abs_builddir)'而不是。 – 2012-07-12 21:51:52

回答

0

我遇到的第一個問題是,使用VPATH構建時,找不到構建目錄中的文件(例如,通過調用(require))。出於某種原因,consing nilload-path不起作用,但consing $(abs_srcdir)作品。

第二個問題是我無法捕捉到(byte-compile)引發的錯誤。這是通過wvxvw解決的:(byte-compile)不會引發錯誤,但如果編譯成功則返回t。因此,類似於:

(unless (byte-compile-file "$<") (kill-emacs 1)) 

很好地工作。

0

我清理了你給的片段,並沒有在目錄~/test測試用例。 我最終得到以下三個文件。

的Makefile:

abs_srcdir=~/test 

all: foo.elc bar.elc 

clean: 
     rm -rf *.elc 

%.elc: %.el 
    emacs -Q --batch --eval "(progn (add-to-list 'load-path \"$(abs_srcdir)\") (defun byte-compile-dest-file (f) \"[email protected]\") (condition-case nil (byte-compile-file\"$<\") (error (kill-emacs 1))))" 

foo.el:

(defun foo-fun() 
    (message "foo")) 

(provide 'foo) 

bar.el: (需要「富)

(defun bar-fun() 
    (foo-fun)) 

(provide 'bar) 

這個例子對我的作品,只有當失敗我給abs_srcdir提供了錯誤的定義。

+0

你正在使用VPATH構建?當所有.el文件位於同一個目錄中時,我沒有遇到任何問題。 – 2012-07-12 21:45:57

+0

儘管這並不能完全回答我的問題,但請將賞金作爲感謝。 – 2012-07-14 07:32:04