Visual Studio:在构建期间复制内容,无论cpp如何变化

时间:2012-12-13 22:47:23

标签: c++ visual-studio visual-c++ msbuild

我正在开发一个游戏引擎,用于在项目的Content子文件夹中存储内容(音频文件,配置文件,纹理等)。主文件存在于$(ProjectDir)/ Content中,并且只要主文件发生更改,就需要将其复制到各个目标目录(“Debug / Content”和“Release / Content”)。

我正在使用一个非常好的后期制作活动:

XCOPY“$(ProjectDir)内容”“$(TargetDir)内容”/ I / D / E / C / Y

不幸的是,它只适用于版本和版本。链接发生 - 即我必须“触摸”一些.cpp文件来触发它,否则VS永远不会执行构建后的XCOPY命令。

有没有办法让它始终在Build(F6)或Run(F5)上运行命令?或者更好的方法来处理项目中的内容文件?希望能够快速调整内容文件然后运行游戏进行预览。

这是Visual Studio 2012专业版。

2 个答案:

答案 0 :(得分:3)

编辑:我的答案的先前版本在技术上是正确的,但设置不像这个简单。

打开.vcxproj文件并在底部附近包含这些行:

<Target Name="CopyContent" AfterTargets="Build">
  <ItemGroup>
    <ContentFiles Include="ContentFiles/*.png" />
  </ItemGroup>
  <Copy DestinationFolder="Debug/Content/"
        SkipUnchangedFiles="True"
        SourceFiles="@(ContentFiles)"
        UseHardlinksIfPossible="True" />
</Target>

这将复制所有已更改的文件,无论其他源文件的状态如何(即,即使您不必编译任何代码,MSBuild仍将确保您的内容文件是最新的)。

答案 1 :(得分:2)

OK!找到了解决方案 - 使用一些模糊的MSBuild语法。基于moswald的回答和一些在线研究。

<Target Name="CopyContent" AfterTargets="Build">
  <ItemGroup>
    <DeployFileGroup 
      Include="**\*.json;**\*.png;**\*.wav;**\*.mp3;" />
  </ItemGroup>
  <Copy SourceFiles="@(DeployFileGroup)" 
    DestinationFiles="@(DeployFileGroup->'$(TargetDir)%(RecursiveDir)\%(Filename)%(Extension)')" 
    SkipUnchangedFiles="True" UseHardlinksIfPossible="True"/>
</Target>