2012-11-02 71 views
3

在emacs內部編譯程序的最佳方法是什麼?我目前正在打開一個單獨的緩衝區,使用C-x 3並使用M-x eshell在其中運行eshell,然後直接調用make或clang;大部分時間我都設置了Makefile。從Emacs內部編譯程序?

運行編譯過程使用M-x compile與運行make inside eshell有沒有什麼優勢?任何其他的方式來做到這一點,這些有什麼優點/缺點?

+0

不熟悉eshell,但我敢肯定它不支持C-x' – carlosdc

+0

@carlosdc eshell是在lisp中編寫的emacs內部的UNIX shell中內置的。它的行爲像任何標準的UNIX shell,但在emacs中。我只是在emacs中的一個單獨的緩衝區中打開它。 – haziz

+0

是的,好像你錯過了許多emacs功能。 Will的答案很好地解釋了M-x編譯的特性。 – carlosdc

回答

9

最簡單的方法是使用Emacs內置的compile命令。 M-x compile應該會很好。然後,您可以編輯將要運行的命令(默認爲make -k),然後按回車鍵以運行編譯。然後Emacs將解析輸出,如果發現任何錯誤,他們將鏈接到源文件,以便您可以在緩衝區中打開它們。

關於它陽性是:

  • 輸出緩衝器
  • 背誦
  • 編譯輸出被在一個非選擇的緩衝器所示調用之間編譯命令的解析,可以快速編輯文件你正在處理和修復任何愚蠢的錯誤。
  • M-nM-p滾動通過錯誤消息

大多數這些特徵由compilation-minor-mode次要模式提供儘管不是實際的編譯命令和緩衝區。在eshell中運行編譯命令後,通過將次要模式設置爲compilation-minor-mode,您可能會得到類似的結果。

+2

+1。我可以感受到我的'C-x反引號'和'TAB'反射... – ldav1s

2

我個人更喜歡跑make或任何命令,您使用的是 一個multi-term 由於以下原因中編譯:

  • 它就像的MxcompileRET如果激活 compilation-shell-minor-modeMpC-`,...)。

  • ,但你可以,很明顯,使用其他命令,如

    mkdir build 
    cd build 
    ./configure --with-another-option 
    

    當然你也可以從Emacs中做到這一點,但我更喜歡這種東西的外殼 互動。

和海事組織的的Mxcompile的主要缺點是,如果 您正在編輯位於另一個目錄不是文件的 Makefile那麼你必須使用的Mxcompile在正確的 目錄然後Mxrecompile。但是,如果你想要,說 make clean && make,那麼你將不得不切換到正確的 目錄,做到這一點,切換回來。

但是term.el有它自己的缺點,它使用非便攜式hacky 的方式來跟蹤當前目錄。