Visual Studio 2017未检测到.cu(CUDA)文件中的更改。

13

我已经安装了Visual Studio 2017和Cuda Toolkit 9.1,且已经成功构建了几个项目来确认它们的可用性。

但是当我编辑一个 .cu 文件并按下“构建”按钮时,它显示项目已经是最新的,只有使用“重建”才能将更改构建到新的二进制文件中。


1
你是否将相关的文件/项目添加到配置管理器中了?(生成 -> 配置管理器) - Christian W.
2
我使用vs2017、cuda 9.1和toolset v140也遇到了同样的问题,请告知我是否有解决方案。 - Soeren
我有同样的问题。 - Henrik
4个回答

4

一种解决方法是通过强制编译而不是使用构建进行编译,使用Build -> CompileCtrl+F7 代替。
这对我解决了问题,但请注意,在采用上述解决方法之前,我最初尝试了Build -> Run Code Analysis on File(这也起作用)。


1

微软在VS 2017中修改了源代码更改检测的方式。

chrispy81在Nvidia Developer Forum上提供了一个解决方案。

In the CUDA 10.0.targets files:
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\BuildCustomizations\CUDA 10.0.targets" 
"C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\BuildCustomizations\CUDA 10.0.targets" 
"c:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\visual_studio_integration\MSBuildExtensions\CUDA 10.0.targets" 

under this tag:

<WriteLinesToFile
    Condition="'%(CudaCompile.ExcludedFromBuild)' != 'true'"
    File="%(CudaCompile.DepsOutputPath)"
    Lines="@(_CudaCompileDeps)"
    Overwrite="true" />

write this:

<PropertyGroup>
    <CudaCompileItemFullPath>%(CudaCompile.FullPath)</CudaCompileItemFullPath>
</PropertyGroup>

<GetOutOfDateItems
    Condition ="'$(SelectedFiles)' == ''"
    Sources ="%(CudaCompile.FullPath);
    @(_CudaCompileDeps)"
    OutputsMetadataName ="Outputs"
    DependenciesMetadataName ="AdditionalInputs"
    CommandMetadataName ="Command"
    TLogDirectory ="$(TLogLocation)"
    TLogNamePrefix ="%(CudaCompile.Filename)%(CudaCompile.Extension)$(CudaCompileItemFullPath.GetHashCode())">
    <Output TaskParameter="OutOfDateSources" ItemName="CudaBuildCoreOutOfDateItems"/>
</GetOutOfDateItems>

1

1
在向NVidia提交错误报告后,他们在下一个工作日解决了该问题,并承诺在下一个Nsight Visual Studio版本中提供修复程序。(我目前正在使用CUDA 10.0附带的Nsight Visual Studio 6.0。)我期待着尝试新版本(无论何时发布),并对他们的反应速度感到惊喜。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接