2013-08-16 17 views
9

Mam projekt, który buduje bibliotekę i chcę dodać do niej wsparcie cuda.CMake: jak dodać cuda do istniejącego projektu

Struktura jest:

| bazowego katalogu
| _subdir1
| _subdir2

Podstawowa struktura plików CMakeLists.txt: (subdir2 nie jest ważne).
w basedir:

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

w podkatalog1:

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) 

I rzeczywiście tak naprawdę nie wie, jak umieścić CUDA wsparcie do niego. Chcę zastąpić file2.cpp plikiem file2.cu i zrobiłem to, ale nie zbudowałem pliku .cu, tylko pliki cpp.

Czy muszę dodać CUDA_ADD_EXECUTABLE(), aby uwzględnić wszystkie pliki cuda? Jak mogę następnie połączyć go z innymi plikami?

Próbowałem dodanie następujących do CMakeLists.txt w podkatalog1:

CUDA_ADD_EXECUTABLE(cuda file2.cu OPTIONS -arch sm_20) 

To będzie skompilować plik wykonywalny, ale zbudować CUDA. Jak połączyć go z mylib? Tylko z ?:

TARGET_LINK_LIBRARIES(cuda mylib) 

muszę przyznać, że nie jestem doświadczony w cmake, ale myślę, że zorientowali.

Odpowiedz

12

Możesz użyć CUDA_ADD_LIBRARY dla projektu mylib. Działa jako CUDA_ADD_EXECUTABLE, ale dla bibliotek.

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

TARGET_LINK_LIBRARIES(mylib ${CUDA_LIBRARIES}) 
+0

Dzięki za to proste rozwiązanie! Działa świetnie. – nanosto

Powiązane problemy