0

コードの品質をチェックするためのビルド ターゲットが 2 つあります。

コンパイルするたびに、次のビルドターゲットを実行します。これには時間がかかりすぎるので、変更されたファイルのみをチェックしてもらいたいです。

言い換えれば、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シェルスクリプトを追加しました)。そして、試すことができる TortoiseSVN プラグインがあります (http://sourceforge.net/apps/phpbb/cppcheck/viewtopic.php?f=3&t=443)。

于 2012-12-04T06:26:57.467 に答える
0

解決策はインクリメンタル Buildです。MSBuild はタイムスタンプを比較して、何も変更されていない場合は完全な Buildtargets を除外します。

次のターゲットは、各ファイルのタイムスタンプを作成し、変更されていないファイルをスキップします。

エラーが検出され、タイムスタンプが書き込まれていない場合、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 に答える