使用CUDA进行CMake:用不必要的引号括起来的ccbin(\“)

时间:2016-03-21 20:51:25

标签: c++ cuda cmake

我已设置了我的CMakeLists.txt,以便${CUDA_HOST_COMPILER}/usr/local/cuda/bin/gcc(指向/usr/bin/gcc-4.9)。这是应该的,并且一直对我很好......直到今天。我跑了一个版本,在中间链接阶段,我得到了:

"/usr/local/cuda/bin/gcc": No such file or directory
CMakeFiles/tester.dir/build.make:2335: recipe for target 'CMakeFiles/wherever/foo_intermediate_link.o' failed

仔细观察,结果是编译nvcc命令是:

/usr/local/cuda/bin/nvcc foo.cu -dc -o CMakeFiles/someplace/foo.cu.o -ccbin /usr/local/cuda/bin/gcc -m64 etc. etc.

但是中间链接命令是

/usr/local/cuda/bin/nvcc -gencode arch=compute_30,code=compute_30 -g -G --generate-line-info -m64 -ccbin \"/usr/local/cuda/bin/gcc\" -dlink etc. etc.

请注意转义的\"。为什么会这样?

PS - 我的主要可疑原因是apt-get upgrade的效果可能改变了我的CMake版本(这是Debian Stretch机器)。

1 个答案:

答案 0 :(得分:2)

我似乎是对的:在/usr/share/CMake/FindCUDA.cmake第1554行,我们需要替换:

      list(APPEND nvcc_flags -ccbin "\"${CUDA_HOST_COMPILER}\"")

      list(APPEND nvcc_flags -ccbin "${CUDA_HOST_COMPILER}")

它不会用额外的引号括起你的编译器路径。