【问题标题】:Compiling Programs from Within Emacs?从 Emacs 中编译程序?
【发布时间】:2012-11-02 19:58:13
【问题描述】:

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

使用M-x compile 运行编译过程与在eshell 中运行make 相比有什么优势吗?还有其他方法吗?这些方法的优点/缺点是什么?

【问题讨论】:

  • 不熟悉eshell,但我很确定它不支持C-x `
  • @carlosdc eshell 是用 lisp 编写的 emacs 中内置的 UNIX shell。它的行为类似于任何标准的 UNIX shell,但在 emacs 中。我只是在 emacs 中的单独缓冲区中打开它。
  • 是的,您似乎错过了很多 emacs 功能。 Will 的回答很好地解释了 M-x compile 的特性。
  • 我肯定会选择M-x compile,刚刚在M-x eshell 中尝试过make。事实上,M-x compile 是我经常使用的少数几个键绑定之一(如果你有兴趣,C-x c)。

标签: c emacs compilation clang eshell


【解决方案1】:

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

积极的一面是:

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

大部分这些功能由compilation-minor-mode 次要模式提供,但不是实际的编译命令和缓冲区。在eshell 中运行编译命令后,将次要模式设置为compilation-minor-mode 可能会得到类似的结果。

【讨论】:

    【解决方案2】:

    我个人更喜欢运行 make 或您使用的任何命令 在multi-term 内编译 原因如下:

    • 如果你激活它,它就像 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。但如果你愿意,请说 make clean && make,那么你必须切换到正确的 目录,执行,切换回来。

    但是term.el 有它自己的缺点,它使用了一个非便携的hacky 跟踪当前目录的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多