在emacs编译模式下正确处理并行构建错误

时间:2012-05-23 18:42:40

标签: emacs compilation

当我使用M-x compile为多(级别)dir项目使用make -jn进行并行编译时,当我收到错误时,我无法使用{{1}到达正确的位置} 东西。对于有问题的文件,Emacs总是进入错误的目录。但是,如果我不使用-jn,我就没有问题。

1 个答案:

答案 0 :(得分:0)

next-error使用编译的文本输出来确定去哪里。但是使用并行编译时,这个文本输出可能会被破坏,即使它没有被破坏,它也可能并且通常是模棱两可的(想想一个任务编译foo / bar和另一个任务编译toto / titi,输出看起来像“进入”目录foo;输入目录toto; bar中的错误:20;错误:titi:69“)。

我只能想到以下解决这个问题的方法:

  • 构建您的make文件,以便您永远不会更改目录(因此所有文件名都相对于同一个当前工作目录)。
  • 更改您的make文件,以便将绝对文件名传递给编译器,因此错误消息中的所有文件名都是绝对的。
  • 破解Emacs的compile.el,以便在查找“bar”时,它会在之前提到的所有目录中获取它。

这最后的改变可能是一个好的(即补丁欢迎),但请注意,如果“foo”和“toto”中都存在“bar”,它仍会遇到问题。 另外两个更改也可能会遇到问题,因为输出也可能看起来像“输入目录foEntering目录toto; o;”;我不知道如何避免这个问题。