2016-03-21 2 views
1

Я установил свой CMakeLists.txt так, чтобы ${CUDA_HOST_COMPILER} был /usr/local/cuda/bin/gcc (что указывает на /usr/bin/gcc-4.9). Это так, как должно быть, и отлично работает для . мне ... до сегодняшнего дня я не побежал строить, и во время промежуточной фазы связи, я получил:CMake с CUDA: ccbin с ненужными кавычками ( ")

"/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, которую я имею (это Stretch Machine Debian).

ответ

2

Кажется, я был прав: В /usr/share/CMake/FindCUDA.cmake, строка 1554, нам нужно заменить:

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

с

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

который не заключите путь компилятор с дополнительными кавычками.