当测试用例失败时,这是Boost.Test的输出:
bjam toolset=msvc ...patience... ...found 1287 targets... ...updating 4 targets... compile-c-c++ ..\bin\test\Function.test\msvc-8.0\debug\link-static\threading-multi\Function.obj Function.cpp msvc.link ..\bin\test\Function.test\msvc-8.0\debug\link-static\threading-multi\Function.exe msvc.manifest ..\bin\test\Function.test\msvc-8.0\debug\link-static\threading-multi\Function.exe testing.capture-output ..\bin\test\Function.test\msvc-8.0\debug\link-static\threading-multi\Function.run ====== BEGIN OUTPUT ====== Running 1 test case... Function.cpp(26): fatal error in "FunctionConstruction": critical check pf->Name() == "F13" failed [F1 != F13] *** 1 failure detected in test suite "foo_test" Detected memory leaks! Dumping objects -> {235} normal block at 0x003A7C88, 32 bytes long. Data: 00 00 00 00 CD CD CD CD 54 31 00 CD CD CD CD CD {234} normal block at 0x003A7E00, 96 bytes long. Data: 00 00 00 00 CD CD CD CD 54 31 00 CD CD CD CD CD {233} normal block at 0x003A7D88, 76 bytes long. Data: F4 D9 45 00 00 00 00 00 CD CD CD CD 00 7E 3A 00 Object dump complete. EXIT STATUS: 201 ====== END OUTPUT ======
MSVC正确解析此错误,因此我可以双击并跳转到代码中。但emacs无法解析此输出。如何教它?
答案 0 :(得分:3)
解决方案将涉及自定义变量:'compilation-error-regexp-alist
,'compilation-error-regexp-alist-alist
,'compilation-directory-matcher
。
第一个,'compilation-error-regexp-alist
只是一个符号列表,告诉编译模式在第二个变量`'compilation-error-regexp-alist-alist'中查找什么,所以你可能只是添加一些东西为了提升:
(add-to-list 'compilation-error-regexp-alist 'boost)
然后,为了完成这项工作,您需要向第二个变量'compilation-error-regexp-alist-alist
添加一个列表。这是它开始变得棘手的地方。您需要阅读第一个变量的文档才能使正则表达式正确,但它将类似于:
(add-to-list 'compilation-error-regexp-alist-alist
'(boost
"^\\(.*\\)(\\([0-9]+\\)): fatal error in" 1 2))
regexp与错误行匹配,1和2分别指定指定文件名和行号的子表达式。您还可以指定其他内容(请参阅文档)。
但是,老实说,上面两个设置可能是不必要的,因为我很确定现有的正则表达式之一会匹配格式。目录跟踪确实存在问题。
最后一个变量`'compilation-directory-matcher'是让下一个错误跟踪在哪里找到文件的变量。所以需要适当更新。它看起来不像升级测试吐出Emacs寻找的有些标准的“输入目录...”,但信息似乎在编译行中......
您也可以尝试询问提升用户邮件列表,看看是否有人解决了这个问题。邮件列表可以找到here。