gpt4 book ai didi

c++ - 自定义构建文件更改不会触发 VS 2017 中的项目重建

转载 作者:搜寻专家 更新时间:2023-10-31 02:05:28 24 4
gpt4 key购买 nike

在我的 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 &gt;&gt; shaders_bytecode.h" WorkingDirectory="$(ProjectDir)\SPIR-V" />
<Exec Condition="'$(VULKAN_SDK)'!=''" Command="del %(GLSLShader.Filename)%(GLSLShader.Extension).h" WorkingDirectory="$(ProjectDir)\SPIR-V" />

</Target>
</Project>

如果我更改任何 .cpp .h 文件并构建解决方案,着色器将与项目的其余部分一起编译,但如果我仅更改着色器文件(即 SPIR-V\canvas2D.vert),则项目是未建。 VS 说该项目是最新的。

奇怪的是,如果我在 VS 之外的终端上使用 msbuild 运行项目,着色器文件更改足以触发重建。去图....!!!

它看起来像是与 VS 如何构建项目有关的东西。它在 msbuild 之外。

最佳答案

啊哈!!在此 article 中找到它.事实证明,visual studio 绕过 msbuild 并使用其他一些标准来验证项目是否是最新的。如果条件未通过,则在该项目上运行 msbuild。

要覆盖 visual studio 行为,请在项目的 xml 的 Globals 属性组中将属性 DisableFastUpToDateCheck 设置为 true:

<PropertyGroup Label="Globals">
<!-- Other Global Property Settings -->
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
</PropertyGroup>

完成了...我想知道是否有一种方法可以告诉 Visual Studio FastUpToDateCheck 机制也注意自定义构建文件?????上面的解决方案现在就足够了。

关于c++ - 自定义构建文件更改不会触发 VS 2017 中的项目重建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52019283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com