2013-08-16 19 views
9

Kütüphane oluşturan bir projem var ve buna cuda desteği eklemek istiyorum.CMake: varolan projeye nasıl eklenir

yapısı şöyledir:

| basedir
|
_subdir1 | _subdir2

CMakeLists.txt dosyalarının temel yapısı: (subdir2 önemli değildir). Basedir içinde
:

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

AltDiz1:

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) 

Aslında gerçekten içine cuda-destek koymak nasıl bilmiyorum. File2.cp dosyasını file2.cu ile değiştirmek istiyorum ve bunu yaptım, ancak .cu dosyasını, sadece cpp dosyalarını oluşturmadı.

Cuda dosyalarını eklemek için CUDA_ADD_EXECUTABLE() eklemek zorunda mıyım? Bunu diğer dosyalara nasıl bağlarım?

ben AltDiz1 CMakeLists.txt için aşağıdaki ekleyerek çalıştı: dosyayı derlemek ama bir çalıştırılabilir cuda inşa edecek

CUDA_ADD_EXECUTABLE(cuda file2.cu OPTIONS -arch sm_20) 

. Bunu mylib'e nasıl bağlarım? Sadece ile ?:

TARGET_LINK_LIBRARIES(cuda mylib) 

Ben cmake deneyimli değilim itiraf etmeliyim, ama ben bunu anladım sanırım.

cevap

12

mylib projesi için CUDA_ADD_LIBRARY kullanabilirsiniz. Kütüphaneler için CUDA_ADD_EXECUTABLE olarak çalışır.

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

TARGET_LINK_LIBRARIES(mylib ${CUDA_LIBRARIES}) 
+0

Bu kolay çözüm için teşekkürler! Mükemmel çalışıyor. – nanosto