2012-11-02 46 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 的方式来跟踪当前目录。