2013-08-16 39 views
9

我有一個項目可以建立一個庫,我想爲它添加一些cuda支持。CMake:如何將cuda添加到現有項目

結構爲:

|基本目錄
| _subdir1
| _subdir2

中的CMakeLists.txt文件的基本結構:(subdir2並不重要)。
在基本目錄:

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.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的經歷,但我猜你想通。

回答

12

您可以使用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}) 
+0

感謝您的簡單解決方案!完美的作品。 – nanosto

相關問題