Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Visual studio:在生成期间复制内容,而不考虑cpp更改_C++_Visual Studio_Visual C++_Msbuild - Fatal编程技术网

C++ Visual studio:在生成期间复制内容,而不考虑cpp更改

C++ Visual studio:在生成期间复制内容,而不考虑cpp更改,c++,visual-studio,visual-c++,msbuild,C++,Visual Studio,Visual C++,Msbuild,我正在开发一个游戏引擎,它将内容(音频文件、配置文件、纹理等)存储在项目的内容子文件夹中。主文件位于$(ProjectDir)/Content中,需要在主文件更改时复制到各个目标目录(“Debug/Content”和“Release/Content”) 我正在使用一个非常有效的构建后事件: XCOPY“$(ProjectDir)Content”“$(TargetDir)Content”/I/D/E/C/Y 不幸的是,它只有在生成和链接发生时才起作用,即我必须“触摸”某个.cpp文件才能触发它,否

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

我正在使用一个非常有效的构建后事件:

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

不幸的是,它只有在生成和链接发生时才起作用,即我必须“触摸”某个.cpp文件才能触发它,否则VS永远不会执行生成后的XCOPY命令

有没有办法让它总是在构建(F6)或运行(F5)时运行命令?或者是一种更好的方式来处理项目中的内容文件?希望能够快速调整内容文件,然后运行游戏进行预览

这是Visual Studio 2012 professional中的内容。

编辑:我的答案的前一个版本在技术上是正确的,但设置起来并不像这个版本那么容易

打开.vcxproj文件,并在底部附近包含以下行:

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


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

确定!找到了此问题的解决方案-使用一些模糊的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>


Grr-差不多,但不完全-MSBuild“Copy”任务不复制子目录,我在内容下面有很多子目录。我用XCOPY命令尝试了一个“Exec”任务,但在定义了该任务后,“CopyContent”目标仅在再次修改.cpp文件后执行XCOPY。谢谢你提供的额外信息,我会继续尝试。它在VisualStudio中真的有效吗?我正在尝试vs2013,但它只有在从命令lineAh运行msbuild时才能工作。如果我知道你有子目录,我会把它包括在内。:)很好地理解了这一点,这是非常不直观的。请注意,如果没有
SkipUnchangedFiles=“True”
,则每次构建时都会运行该命令。