带有 CUDA 的 CMake:用不必要的引号 (\) 括起来的 ccbin

CMake with CUDA: ccbin enclosed with unnecessary quotation marks (")

本文关键字:起来 ccbin CMake CUDA 不必要 带有      更新时间:2023-10-16

我已经设置了我的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.

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

PS - 我的主要怀疑原因是apt-get upgrade的影响,它可能改变了我拥有的CMake版本中的某些内容(这是一台Debian Stretch机器)。

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

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

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

这不会用额外的引号将编译器路径括起来。

相关文章: