CMake: как добавить cuda в существующий проект

у меня есть проект, который строит библиотеку, и я хочу добавить к нему некоторую поддержку cuda.

структура:

|Basedir
|_subdir1
|_subdir2

основная структура CMakeLists.txt файлы: (subdir2 не важно).
в Basedir:

cmake_minimum_required(VERSION 2.6)
PROJECT(myproject)
find_package(CUDA)
INCLUDE_DIRECTORIES(${MYPROJECT_SOURCE_DIR})
ADD_SUBDIRECTORY(subdir1)
ADD_SUBDIRECTORY(subdir2)

в subdir1:

ADD_LIBRARY(mylib shared
    file1.cpp
    file2.cpp
    file3.cpp
)

INSTALL(
TARGETS mylib
DESTINATION lib
PERMISSIONS
    OWNER_READ OWNER_WRITE OWNER_EXECUTE
    GROUP_READ GROUP_EXECUTE
    WORLD_READ WORLD_EXECUTE
)

FILE(GLOB_RECURSE HEADERS RELATIVE ${MYPROJECT_SOURCE_DIR}/myproject *.h)

FOREACH(HEADER ${HEADERS})
    STRING(REGEX MATCH "(.*)[/]" DIR ${HEADER})
    INSTALL(FILES ${HEADER} DESTINATION include/myproject/${DIR})
ENDFOREACH(HEADER)

Я на самом деле не знаю, как поместить в него поддержку cuda. Я хочу заменить file2.cpp с file2.cu и я сделали это, но он не построил .файл cu, только файлы cpp.

нужно ли добавлять CUDA_ADD_EXECUTABLE () для включения любых cuda-файлов? Как я тогда свяжу его с другими файлами?

Я попытался добавить следующее В CMakeLists.txt в subdir1:

CUDA_ADD_EXECUTABLE(cuda file2.cu OPTIONS -arch sm_20)

это скомпилирует файл, но построит исполняемый файл cuda. Как связать его с mylib? Только с?:

TARGET_LINK_LIBRARIES(cuda mylib)

Я должен признать, что у меня нет опыта в cmake, но я думаю, вы поняли что.

1 ответов


можно использовать CUDA_ADD_LIBRARY на . Он работает как CUDA_ADD_EXECUTABLE но для библиотек.

CUDA_ADD_LIBRARY(mylib SHARED
    file1.cpp
    file2.cu
    file3.cpp
    OPTIONS -arch sm_20
)

TARGET_LINK_LIBRARIES(mylib ${CUDA_LIBRARIES})