CMake:如何将cuda添加到现有项目中

时间:2013-08-16 12:50:56

标签: cuda cmake

我有一个构建库的项目,我想为它添加一些cuda支持。

结构是:

|基辅
| _subdir1
| _subdir2

CMakeLists.txt文件的基本结构:(subdir2并不重要) in 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-support放入其中。我想用file2.cu替换file2.cpp并且我这样做了,但它没有构建.cu文件,只构建了cpp文件。

我是否必须添加CUDA_ADD_EXECUTABLE()才能包含任何cuda文件?然后我如何将其链接到其他文件?

我尝试将以下内容添加到subdir1中的CMakeLists.txt:

CUDA_ADD_EXECUTABLE(cuda file2.cu OPTIONS -arch sm_20)

那将编译文件,但构建一个可执行文件cuda。如何将其链接到mylib? 只是用?:

TARGET_LINK_LIBRARIES(cuda mylib)

我不得不承认我在cmake方面没有经验,但我想你认为是这样。

1 个答案:

答案 0 :(得分:13)

您可以将CUDA_ADD_LIBRARY用于mylib项目。它适用于CUDA_ADD_EXECUTABLE但适用于图书馆。

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

TARGET_LINK_LIBRARIES(mylib ${CUDA_LIBRARIES})