Я использую CMake для своего проекта с использованием CUDA. Недавно мне пришлось включить "раздельную компиляцию" части моего кода CUDA:
set(CUDA_SEPARABLE_COMPILATION ON)
но потом строительство начало рушиться. Например, может произойти следующее:
/usr/local/cuda/bin/nvcc -gencode arch=compute_30,code=compute_30 --std=c++11 \
-Xcompiler -Wall -O3 -DNDEBUG "" "" "" "" -m64 -ccbin /usr/bin/cc \
-dlink /some/where/generated_foo.cu.o -o /some/where/foo_intermediate_link.o
nvcc fatal : Don't know what to do with ''
(строки разорваны, а имена сокращены для удобства чтения)
Итак, проблема в том, что что-то заставляет CMake добавлять пустые (заключенные в кавычки) строки в командную строку, что не нравится nvcc. В остальном команда выглядит нормально.
Теперь -O3 -DNDEBUG
- это мои флаги компиляции nvcc для сборок выпуска. Но я, конечно, нигде не добавлял никаких флагов с пустой строкой. Я попытался выяснить, как FindCUDA создает вызов nvcc, но не смог понять, откуда берутся эти пустые строки.
Не вдаваясь в подробности моего CMakeLists.txt
, может ли это быть хорошо известной проблемой с модулем CMake FindaCUDA, который имеет общий обходной путь?
Примечание: я использую GNU / Linux Mint 18.3, CMake 3.5 и CUDA 9.1.