alc*_*ado 4 c++ msbuild visual-studio-2017
在我的 C++ VS 项目中,我添加了一个自定义目标来编译着色器文件并将其设置为初始目标。这是项目的xml
<Project InitialTargets="CompileShaders" DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
..... Normal Default VS C++ content here ......
<ItemGroup>
<GLSLShader Include="SPIR-V\canvas2D.vert" />
<GLSLShader Include="SPIR-V\canvas2D.frag" />
</ItemGroup>
<Target Name="CompileShaders" Inputs="@(GLSLShader)" Outputs="SPIR-V\shaders_bytecode.h" >
<PropertyGroup>
<OriginalFileName>%(GLSLShader.Filename)%(GLSLShader.Extension)</OriginalFileName>
</PropertyGroup>
<Message Text="Start Compiling GSLANG @(GLSLShader) " />
<Message Condition="'$(VULKAN_SDK)'==''" Text="Error, cant find environment variable VULKAN_SDK, Make sure that the Lunar Vulkan SDK is installed" />
<Message Condition="'$(VULKAN_SDK)'!=''" Text="$(VULKAN_SDK)\Bin\glslangValidator.exe %(GLSLShader.Filename)%(GLSLShader.Extension) -V --vn $([System.String]::Copy('%(GLSLShader.Filename)%(GLSLShader.Extension)').Replace('.','_')) -o %(GLSLShader.Filename)%(GLSLShader.Extension).h" />
<Exec Condition="'$(VULKAN_SDK)'!=''" Command="$(VULKAN_SDK)\Bin\glslangValidator.exe %(GLSLShader.Filename)%(GLSLShader.Extension) -V --vn $([System.String]::Copy('%(GLSLShader.Filename)%(GLSLShader.Extension)').Replace('.','_')) -o %(GLSLShader.Filename)%(GLSLShader.Extension).h" WorkingDirectory="$(ProjectDir)\SPIR-V" />
<Exec Condition="'$(VULKAN_SDK)'!=''" Command="del shaders_bytecode.h" WorkingDirectory="$(ProjectDir)\SPIR-V" />
<Exec Condition="'$(VULKAN_SDK)'!=''" Command="type %(GLSLShader.Filename)%(GLSLShader.Extension).h >> shaders_bytecode.h" WorkingDirectory="$(ProjectDir)\SPIR-V" />
<Exec Condition="'$(VULKAN_SDK)'!=''" Command="del %(GLSLShader.Filename)%(GLSLShader.Extension).h" WorkingDirectory="$(ProjectDir)\SPIR-V" />
</Target>
</Project>Run Code Online (Sandbox Code Playgroud)
如果我更改任何 .cpp .h 文件并构建解决方案,着色器将与项目的其余部分一起编译,但如果我仅更改着色器文件(即 SPIR-V\canvas2D.vert),则不会构建项目。VS 表示该项目是最新的。
现在奇怪的是,如果我在 VS 的终端上使用 msbuild 运行项目,着色器文件的更改足以触发重建。去搞清楚....!!!
它看起来像是与 VS 如何构建项目有关的东西。它位于 msbuild 之外。
啊哈!!在这篇文章中找到了。事实证明,Visual Studio 绕过了 msbuild 并使用其他一些标准来验证项目是否是最新的。如果条件失败,则会在该项目上运行 msbuild。
要覆盖 Visual Studio 行为,请将项目 xml 的 Globals 属性组中的属性 DisableFastUpToDateCheck 设置为 true:
<PropertyGroup Label="Globals">
<!-- Other Global Property Settings -->
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
完成了...我想知道是否有一个方法可以告诉 Visual Studio FastUpToDateCheck 机制也注意自定义构建文件?????? 上面的解决方案现在就足够了。
| 归档时间: |
|
| 查看次数: |
1367 次 |
| 最近记录: |