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



我安装了Visual Studio 2017和Cuda Toolkit 9.1。它正在工作,我通过构建几个项目来确认它。

现在,当我编辑 .cu 文件并按构建时。它说该项目已经是最新的。只有在使用重新生成时,才能将更改构建到新的二进制文件中。

解决方法

是强制使用 Build -> CompileCtrl+F7 进行编译而不是生成。
这为我解决了这个问题,但也请注意,在随后采用上述解决方法之前,我最初尝试了Build -> Run Code Analysis on File(这也有效(。

在NVidia提交错误报告后,他们在下一个工作日解决了工单,并承诺在下一个版本的Nsight Visual Studio中提供修复程序。(我目前使用的是CUDA 10.0附带的Nsight Visual Studio 6.0。

我期待着尝试新版本(无论何时发布(,我对他们的反应速度感到惊喜。

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

一个解决方案是从 chrispy81 在 Nvidia 开发者论坛上编写的。

In the CUDA 10.0.targets files:
"C:Program Files (x86)Microsoft Visual Studio2017ProfessionalCommon7IDEVCVCTargetsBuildCustomizationsCUDA 10.0.targets" 
"C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V110BuildCustomizationsCUDA 10.0.targets" 
"c:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.0extrasvisual_studio_integrationMSBuildExtensionsCUDA 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>
好消息

!此问题已得到解决,并在 2019 年 2 月发布的 CUDA 10.1 工具包中提供。https://developer.nvidia.com/cuda-toolkit

抱歉久等。

相关内容

最新更新