2013-08-16 23 views
9

私はライブラリをビルドするプロジェクトを持っており、それにいくつかのcudaサポートを追加したいと思います。CMake:既存のプロジェクトにcudaを追加する方法

構造は次のとおりです。

| BASEDIR
|
_subdir1 | _subdir2

CMakeLists.txtファイルの基本構造:(subdir2は重要ではありません)。 BASEDIRで
:subdir1で

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

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-filesを含めるにはCUDA_ADD_EXECUTABLE()を追加する必要がありますか?どうすれば他のファイルにリンクできますか?

私はsubdir1にCMakeLists.txtに次を追加してみました:

CUDA_ADD_EXECUTABLE(cuda file2.cu OPTIONS -arch sm_20) 

ファイルをコンパイルするが、実行可能CUDAを構築すること。それをmylibにどのようにリンクさせるのですか? だけで?:

TARGET_LINK_LIBRARIES(cuda mylib) 

私はcmakeの中で経験していないよということを認めざるを得ないが、私はあなたがそれを考え出したと思います。

答えて

12

mylibプロジェクトには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}) 
+0

ありがとうございました!完璧に動作します。 – nanosto

関連する問題