QtCreator无法解析msbuild编译错误/警告

时间:2015-03-27 13:47:55

标签: visual-studio-2013 msbuild ide qt-creator

当我尝试使用QtCreator 3.3.2构建Visual Studio 2013项目时,它不会将错误和警告放入“问题”面板中。它们在编译输出中可见但不可点击。以下是我用一个简单的例子重现这个问题的步骤。

首先,我在Visual Studio中创建了一个基本的Win32控制台应用程序,并在_tmain函数中添加了一行:

int _tmain(int argc, _TCHAR* argv[])
{
   deliberately_missing_function(5);
   std::cout << "Hello world" << std::endl;
    return 0;
}

Visual Studio按预期报告了deliberately_missing_function的编译错误。

我使用“导入现有项目”模板创建一个新的QtCreator项目,并将其保存在与Visual Studio解决方案文件相同的目录中。在项目设置中,我在构建中创建自定义流程步骤,并将命令填充为C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe,将参数填充为/p:Platform=Win32

构建时,编译输出显示:

(snip)
Build FAILED.

"C:\Users\Portponky\Documents\Visual Studio 2013\Projects\Test\Test.sln" (default target) (1) ->
"C:\Users\Portponky\Documents\Visual Studio 2013\Projects\Test\Test\Test.vcxproj" (default target) (2) ->
(ClCompile target) -> 
  c:\users\Portponky\documents\visual studio 2013\projects\test\test\test.cpp(9): error C3861: 'deliberately_missing_function': identifier not found [C:\Users\Portponky\Documents\Visual Studio 2013\Projects\Test\Test\Test.vcxproj]

    0 Warning(s)
    1 Error(s)

未提取并显示在“问题”面板中。我的QtCreator配置了选项'套件'部分中设置的正确编译器。我知道QtCreator应该支持读取msbuild错误,但我很困惑,因为它似乎根本不起作用。

1 个答案:

答案 0 :(得分:1)

我认为这是因为从3.3.2开始QtCreator的默认错误/警告解析器不接受表单错误:

path/to/file.cpp(123): Error: blah blah blah

它只接受:

path/to/file.cpp(123) : Error: blah blah blah

关键区别是结束行号括号之间的空格。我在Visual Studio中添加了一个自定义构建步骤,以便将假错误消息回显到控制台并查看QtCreator选择了哪些内容,从而推断出这一点。

为了解决这个问题,我创建了一个名为msbuild_wrapper.bat的批处理文件,该文件使用了Cygwin的sed.exe:

@"C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe" %* | c:\cygwin64\bin\sed.exe 's/):/) :/g'

它只使用给定的参数运行msbuild,然后使用sed替换&#34;)的所有事件:&#34;用&#34;):&#34;在输出中。在QtCreator的项目设置中,我将编译器设置为msbuild_wrapper.bat,并将/clp:NoSummary添加到参数中以阻止错误出现两次。

一旦确定,QtCreator会正确地收集所有错误和警告,并将其置于“问题”中。具有正确文件和行号的面板。