在 emacs 中编译程序的最佳方法是什么?我目前正在打开一个单独的缓冲区,C-x 3
并在其中运行 eshell,M-x eshell
然后直接调用 make 或 clang;大多数时候我确实有一个 Makefile 设置。
M-x compile
使用vs 在 eshell 中运行 make运行编译过程有什么好处吗?还有其他方法可以做到这一点,这些方法的优点/缺点是什么?
在 emacs 中编译程序的最佳方法是什么?我目前正在打开一个单独的缓冲区,C-x 3
并在其中运行 eshell,M-x eshell
然后直接调用 make 或 clang;大多数时候我确实有一个 Makefile 设置。
M-x compile
使用vs 在 eshell 中运行 make运行编译过程有什么好处吗?还有其他方法可以做到这一点,这些方法的优点/缺点是什么?
最简单的方法是使用 Emacs 内置compile
命令。M-x compile
你应该没问题。然后,您可以编辑将要运行的命令(默认情况下make -k
),然后按回车键运行编译。然后,Emacs 将解析输出,如果发现任何错误,它们将链接到源文件,以便您可以在缓冲区中打开它们。
关于它的积极因素是:
M-n
并按错误消息M-p
滚动大多数这些特性是由compilation-minor-mode
次要模式提供的,但不是实际的编译命令和缓冲区。一旦你运行了一个编译命令,eshell
你可能会通过将次要模式设置为compilation-minor-mode
.
由于以下原因,我个人更喜欢在多术语make
中运行或您使用的任何命令进行编译:
它就像M-xcompile
RET您激活
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方式来跟踪当前目录。