Я хочу скомпилировать .cu и .cpp в файлы .o отдельно, а затем связать их с исполняемым файлом.У меня есть несколько простых файлов: cuda_func.cu.cuda_func.h и main.cpp.В основной cpp я включаю cuda_func.h и запускаю cuda_func ().Я придумал следующий код cmake:
project(cuda)
cmake_minimum_required(VERSION 2.8)
# CUDA PACKAGE
find_package(CUDA REQUIRED)
set(CUDA_SEPARABLE_COMPILATION ON)
set(CUDA_PROPAGATE_HOST_FLAGS OFF)
set(CUDA_HOST_COMPILER g++)
# COMPILE CU FILES
file(GLOB CUDA_FILES *.cu)
list( APPEND CUDA_NVCC_FLAGS "-gencode arch=compute_30,code=sm_30; -std=c++11")
CUDA_COMPILE(CU_O ${CUDA_FILES})
SET(CMAKE_EXE_LINKER_FLAGS "-L/usr/local/cuda/lib -lcudart")
# SETUP FOR CPP FILES
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
# COMPILE AND LINK
add_executable(main main.cpp ${CU_O})
Но я получаю неопределенную ссылку на ошибку "cudaMemcpy".Когда я компилирую его вручную, используя nvcc и g ++ для получения файлов .o и, наконец, g ++ для создания исполняемого файла, он работает нормально.Кажется, что библиотека CUDA не связана должным образом в конце.Что мне делать?