【问题标题】:Visual studio: Copying content during build, regardless of cpp changesVisual Studio:在构建期间复制内容,无论 cpp 更改如何
【发布时间】:2012-12-13 22:47:22
【问题描述】:

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

我正在使用效果很好的构建后事件:

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

不幸的是,它仅在构建和链接发生时才有效 - 即我必须“触摸”一些 .cpp 文件来触发它,否则 VS 永远不会执行构建后的 XCOPY 命令。

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

这是在 Visual Studio 2012 专业版中。

【问题讨论】:

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


    【解决方案1】:

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

    打开您的 .vcxproj 文件并在底部附近添加以下行:

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

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

    【讨论】:

    • Grr - 几乎在那里,但不完全 - MSBuild“复制”任务不会复制子目录,我在 Content 下有很多子目录。我尝试使用 XCOPY 命令执行“Exec”任务,但定义了“CopyContent”目标仅在再次修改 .cpp 文件后才执行 XCOPY。不过感谢您提供更多信息,我会继续努力。
    • 它真的可以在 Visual Studio 中使用吗?我正在尝试使用 vs2013,但它只有在我从命令行运行 msbuild 时才有效
    【解决方案2】:

    好的!找到了解决方案 - 使用一些晦涩的 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>
    

    【讨论】:

    • 啊。如果我知道你有子目录,我会把它包括在内。 :) 搞清楚了,这可能是不直观的。
    • 请注意,如果没有SkipUnchangedFiles="True",则每次构建时都会运行该命令。
    猜你喜欢
    • 2013-08-08
    • 2012-10-24
    • 2017-04-25
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    相关资源
    最近更新 更多