C++ Visual studio:在生成期间复制内容,而不考虑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文件,并在底部附近包含以下行: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文件才能触发它,否
<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”
,则每次构建时都会运行该命令。