У меня есть проект C ++ / CUDA, основанный на CMake. В настоящее время я использую CMake 3.11 и CUDA 9.0 и читаю, что теперь CUDA является первоклассным языком в CMake, поэтому я могу просто добавить .cu
файлы, и он автоматически вызовет компилятор NVCC, чтобы позаботиться о них. До этого нам приходилось использовать find_package(CUDA)
и так далее, но теперь это устаревшая функция .
Теперь вопрос: как нам скомпилировать обычные .cpp
файлы, которые все еще используют библиотеки хостов CUDA? cudaMalloc
, cudaFree
и т. Д. Мое решение до сих пор - set_source_files_properties(file.cpp PROPERTIES LANGUAGE CUDA)
, но я не чувствую, что это правильно. Поскольку этот файл не содержит код устройства, он должен быть скомпилирован с помощью компилятора GCC, включая ссылки на библиотеки CUDA.
Еще одна проблема этого подхода заключается в том, что он очень быстро распространяется на остальную часть проекта. Скажем, файл заголовка, который определяет структуру, содержащую переменную dims3
, затем каждый файл .cpp
, который #include
s этого заголовка, необходимо будет рассматривать как файл CUDA.