问题 如何调整Emacs的compile-goto-error从编译缓冲区获取的路径?


我使用Emacs 23并遇到以下问题:

我从Emacs中运行我们项目的构建系统,如M-x compile - > cd / foo / bar && ./build

构建系统现在做了一些魔术,“cd”进入构建过程的某个子目录,然后gcc抛出一个错误:

../src/somesource.cc:50错误:blablabla

现在的问题是Emacs不会找到该路径,因为它假定编译过程在/ foo / bar中开始,而不是在/ foo / bar / builddir中。所以领先的“../”不适用于Emacs,例如运行compile-goto-error时。有没有办法告诉Emacs尝试跳过领先的“../”?


9126
2018-05-04 14:41


起源

奇怪的是,我在建造时遇到了这个问题 Emacs的... - SamB


答案:


最好的解决方案可能是更改构建系统以在更改目录时发出消息。 Emacs寻找

Entering directory `...'
... 
Leaving directory `...'

(见 compilation-directory-matcher 变量。如果构建系统在更改目录时确实发出消息,但它们不是Emacs正在寻找的格式,则可以添加新的regexp到 compilation-directory-matcher。)

另一种解决方案是改变 compilation-search-path (这是一个目录列表)。


11
2018-05-04 17:55



我不知道Emacs的“输入...”功能。这可能会有所帮助! - Arne
@Arne,GNU Make 以该形式打印消息 使用递归makefile时。这就是Emacs寻找它们的原因。 - cjm
这个解决方案似乎是我正在寻找的,但我无法编辑 compilation-directory-matcher 变量(如您所见: stackoverflow.com/q/21309720/61838)。而且, compilation-search-path 似乎没有解决问题(即使我只需要emacs来查找一个目录中的源)。任何帮助,将不胜感激! - claf
最近更改/修复了GNU make以使用U + 0027而不是U + 0060作为开场报价,并且您的emacs版本可能仍然只能查找旧的U + 0060字符。看到 savannah.gnu.org/bugs/?34530  尝试类似:(setq compilation-directory-matcher'(“\(?:Entering \\ | Leavin \(g \)\)目录['`] \(。+ \)'$”(2.1)) ) - Brad Spencer