0

我有两个构建目标来检查我的代码质量。

每次编译时我都会运行以下构建目标。这占用了太多时间,我希望他们只检查确实更改的文件。

换句话说,我想过滤没有从ItemGroup CppCheckFiles/更改的文件LinterFiles

  <Target Name="CppCheck">
    <ItemGroup>
      <CppCheckFiles Include="*main.c" />
      <CppCheckFiles Include="Source/*/*.c" />
    </ItemGroup>
    <Message Text="$(Configuration) starting." Importance="High" />
    <Exec Command="C:\Cppcheck\cppcheck.exe %(CppCheckFiles.FullPath)  --enable=style --template=&quot;{file}({line}): error:{severity}-{id}: {message}&quot;" />
  </Target>
  <Target Name="SPLint">
    <ItemGroup>
      <LinterFiles Include="*main.c" />
      <LinterFiles Include="Source/*/*.c" />
      <LinterFiles Include="Source/*/*.h" />
    </ItemGroup>
    <Message Text="$(Configuration) starting." Importance="High" />
    <Exec Command="splintCaller %(LinterFiles.FullPath)" />
  </Target>

我知道常规的构建过程会这样做,我想知道我是否必须如此快速地编写自己的任务。

4

2 回答 2

1

嗯..这听起来很有趣。我帮不了你。但是,如果 cppcheck wiki 或手册有一些小的示例项目可以做到这一点,那就太好了。

有些人在提交挂钩中使用 cppcheck。我自己用 GIT 试过(我添加了一个 linux shell 脚本)。还有一个 TortoiseSVN 插件你可以试试(http://sourceforge.net/apps/phpbb/cppcheck/viewtopic.php?f=3&t=443)。

于 2012-12-04T06:26:57.467 回答
0

解决方案是增量构建。如果没有任何更改,MSBuild 会比较时间戳以排除完整的构建目标。

以下目标为每个文件创建一个时间戳并跳过那些未更改的文件。

如果检测到错误并且未写入时间戳,cppcheck.exe 将返回 -1。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="CppCheck" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
      <CppCheckFiles Include="*main.c" />
      <CppCheckFiles Include="Source/*/*.c" />
    </ItemGroup>   

  <Target Name="CppCheck"
    Inputs="@(CppCheckFiles)" 
    Outputs="CCPCheck\%(CppCheckFiles.Filename)%(CppCheckFiles.Extension).stamp">
    <Exec Command="C:\Cppcheck\cppcheck.exe %(CppCheckFiles.FullPath)  --enable=style --template=&quot;{file}({line}): error:{severity}-{id}: {message}&quot;" />
    <MakeDir Directories="CCPCheck"/>
    <Touch Files="CCPCheck\%(CppCheckFiles.Filename)%(CppCheckFiles.Extension).stamp" AlwaysCreate = "true" />
  </Target>

</Project>
于 2012-12-04T16:51:04.210 回答