Msbuild 我想为所有文件运行一个任务,并排除那些没有更改的文件

Msbuild 我想为所有文件运行一个任务,并排除那些没有更改的文件,msbuild,Msbuild,我有两个构建目标来检查我的代码质量 每次编译时,我都会运行以下构建目标。这占用了太多的时间,我希望他们只检查更改过的文件 换句话说,我想从ItemGroupCppCheckFiles/LinterFiles中筛选未更改的文件 <Target Name="CppCheck"> <ItemGroup> <CppCheckFiles Include="*main.c" /> <CppCheckFiles Include="S

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

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

换句话说,我想从
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>


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

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

有些人使用cppcheck-in-commit钩子。我自己也尝试过GIT(我添加了一个linux shell脚本)。还有一个陆龟VN插件,你可以试试(http://sourceforge.net/apps/phpbb/cppcheck/viewtopic.php?f=3&t=443).

解决方案是。其中,如果未发生任何更改,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>