3

在 emacs 中编译程序的最佳方法是什么?我目前正在打开一个单独的缓冲区,C-x 3并在其中运行 eshell,M-x eshell然后直接调用 make 或 clang;大多数时候我确实有一个 Makefile 设置。

M-x compile使用vs 在 eshell 中运行 make运行编译过程有什么好处吗?还有其他方法可以做到这一点,这些方法的优点/缺点是什么?

4

2 回答 2

9

最简单的方法是使用 Emacs 内置compile命令。M-x compile你应该没问题。然后,您可以编辑将要运行的命令(默认情况下make -k),然后按回车键运行编译。然后,Emacs 将解析输出,如果发现任何错误,它们将链接到源文件,以便您可以在缓冲区中打开它们。

关于它的积极因素是:

  • 解析输出缓冲区
  • 在调用之间记忆编译命令
  • 编译输出显示在未选择的缓冲区中,您可以快速编辑正在处理的文件并修复任何愚蠢的错误。
  • M-n并按错误消息M-p滚动

大多数这些特性是由compilation-minor-mode次要模式提供的,但不是实际的编译命令和缓冲区。一旦你运行了一个编译命令,eshell你可能会通过将次要模式设置为compilation-minor-mode.

于 2012-11-02T20:44:10.473 回答
2

由于以下原因,我个人更喜欢在多术语make中运行或您使用的任何命令进行编译:

  • 它就像M-xcompileRET您激活 compilation-shell-minor-mode( M-p, C-`, ...) 一样。

  • 但显然,您可以使用其他命令,例如

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

    当然,你可以从 Emacs 做到这一点,但我更喜欢这种东西的 shell 交互。

而imo,主要缺点M-xcompile是,如果您正在编辑位于另一个目录中的文件, Makefile那么您必须M-xcompile在正确的目录中使用,然后M-xrecompile. 但是,如果您想,说 to make clean && make,那么您将不得不切换到正确的目录,执行此操作,然后切换回来。

但是term.el也有它自己的缺点,它使用了一种不可移植的hacky方式来跟踪当前目录。

于 2012-11-03T10:33:41.640 回答