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

问题描述 投票:0回答:3

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

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

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

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

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

emacs compilation build-system
3个回答
17
投票

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

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

(请参阅

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

另一个解决方案是更改

compilation-search-path
(这是目录列表)。


0
投票

有几次我通过 sed 传递 make 的输出来解决。

首先,交互式调试'编译命令:make | sed 's/x/y/' 。然后重新打包为自定义的emacs交互函数。


0
投票

我还没有找到一种方法来使这个项目具体化,但是我的 init.el 中的这个方法可以解决错误:

(setq directory-abbrev-alist '(("^/src" . "./")))

您需要将其调整为您想要的替换。

就您而言,您可以尝试将

../
替换为
./

(setq directory-abbrev-alist '(("^../" . "./")))

如果您知道如何使其仅适用于特定项目的编译缓冲区,我很高兴知道。

© www.soinside.com 2019 - 2024. All rights reserved.