Visual studio 以MSVC 15.4(2017)作为主机的CUDA 9.0-不兼容问题

Visual studio 以MSVC 15.4(2017)作为主机的CUDA 9.0-不兼容问题,visual-studio,cuda,visual-studio-2017,nvcc,Visual Studio,Cuda,Visual Studio 2017,Nvcc,为什么此命令行适用于VS2015: "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.0/bin/nvcc.exe" -M -D__CUDACC__ D:/gPMCbct/RTK/code/rtkCudaCropImageFilter.cu -o D:/gPMCbct/RTK-build/code/CMakeFiles/cuda_compile_1.dir//cuda_compile_1_generated_rtkCudaCropIma

为什么此命令行适用于VS2015:

"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.0/bin/nvcc.exe" -M -D__CUDACC__ D:/gPMCbct/RTK/code/rtkCudaCropImageFilter.cu -o D:/gPMCbct/RTK-build/code/CMakeFiles/cuda_compile_1.dir//cuda_compile_1_generated_rtkCudaCropImageFilter.cu.obj.NVCC-depend -ccbin "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin" -m64 -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -DITK_IO_FACTORY_REGISTER_MANAGER -Xcompiler ,\"/DWIN32\",\"/D_WINDOWS\",\"/W3\",\"/GR\",\"/EHsc\",\"/std:c++14\",\"/arch:AVX2\",\"/favor:INTEL64\",\"/openmp\",\"/bigobj\",\"/MDd\",\"/Zi\",\"/Ob0\",\"/Od\",\"/RTC1\" -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_35,code=compute_35 -DNVCC -ID:/gPMCbct/RTK "-IC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.0/include" -ID:/gPMCbct/ITKv4/Modules/Core/Common/include -ID:/gPMCbct/ITKv4-build/Modules/Core/Common -ID:/gPMCbct/RTK-build
当VS2017中基本相同的命令行出现故障时:

"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.0/bin/nvcc.exe" -M -D__CUDACC__ D:/gPMCbct/RTK/code/rtkCudaCropImageFilter.cu -o D:/gPMCbct/RTK-build/code/CMakeFiles/cuda_compile_1.dir//cuda_compile_1_generated_rtkCudaCropImageFilter.cu.obj.NVCC-depend -ccbin "C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/bin" -m64 -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -DITK_IO_FACTORY_REGISTER_MANAGER -Xcompiler ,\"/DWIN32\",\"/D_WINDOWS\",\"/W3\",\"/GR\",\"/EHsc\",\"/std:c++14\",\"/arch:AVX2\",\"/favor:INTEL64\",\"/openmp\",\"/bigobj\",\"/MDd\",\"/Zi\",\"/Ob0\",\"/Od\",\"/RTC1\" -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_35,code=compute_35 -DNVCC -ID:/gPMCbct/RTK "-IC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.0/include" -ID:/gPMCbct/ITKv4/Modules/Core/Common/include -ID:/gPMCbct/ITKv4-build/Modules/Core/Common -ID:/gPMCbct/RTK-build
唯一的区别是主机编译器的路径,即“-ccbin”参数

--verbose
打印vcvars64.bat和每个环境路径的输出,然后以
%error\u level%=1退出

这两个命令都是使用CMake生成的

退出代码为1对任何事情都没有真正的帮助,除非知道出了什么问题。 如何获得有关命令失败原因的更多信息

我在线程和邮件列表上发现了类似的问题,但实际问题没有解决,或者解决方案在这里不起作用(一些windows路径问题,一些包含/链接问题和一些源代码问题)


同样的问题也发生在另一个源代码完全不同的CMake生成的项目中。

解决方案似乎很简单,只需将VS17的
-ccbin
路径更改为正确的
cl.exe
文件路径,在我的示例中,正确的路径是:

C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Tools/MSVC/14.11.25503/bin/HostX64/x64/cl.exe

-ccbin
参数与CMake中的
CUDA_HOST_编译器
变量相同。

解决方案似乎很简单,只需将VS17的
-ccbin
路径更改为正确的
cl.exe
文件路径,在我的示例中,正确的路径是:

C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Tools/MSVC/14.11.25503/bin/HostX64/x64/cl.exe
-ccbin
参数与CMake中的
CUDA\u HOST\u编译器
变量相同