2013-08-16 34 views
9

Tôi có một dự án xây dựng một thư viện và tôi muốn thêm một số hỗ trợ cho nó.CMake: cách thêm cuda vào dự án hiện tại

Cấu trúc là:

| basedir
| _subdir1
| _subdir2

Cấu trúc cơ bản của các tập tin CMakeLists.txt: (subdir2 là không quan trọng).
trong basedir:

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

trong 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) 

Tôi thực sự không thực sự biết làm thế nào để đưa CUDA hỗ trợ vào nó. Tôi muốn thay thế file2.cpp với file2.cu và tôi đã làm điều đó, nhưng nó đã không xây dựng các tập tin .cu, chỉ các tập tin cpp.

Tôi có phải thêm CUDA_ADD_EXECUTABLE() để bao gồm bất kỳ tệp cuda nào không? Sau đó tôi sẽ liên kết nó với các tệp khác như thế nào?

tôi đã cố gắng thêm dòng sau vào các CMakeLists.txt trong subdir1:

CUDA_ADD_EXECUTABLE(cuda file2.cu OPTIONS -arch sm_20) 

Điều đó sẽ biên dịch các tập tin nhưng xây dựng một CUDA thực thi. Làm cách nào để liên kết nó với mylib? Chỉ với ?:

TARGET_LINK_LIBRARIES(cuda mylib) 

Tôi phải thừa nhận rằng tôi không có kinh nghiệm trong cmake, nhưng tôi đoán bạn đã tìm ra điều đó.

Trả lời

12

Bạn có thể sử dụng CUDA_ADD_LIBRARY cho dự án mylib. Nó hoạt động như CUDA_ADD_EXECUTABLE nhưng đối với thư viện.

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

TARGET_LINK_LIBRARIES(mylib ${CUDA_LIBRARIES}) 
+0

Cảm ơn giải pháp dễ dàng đó! Hoạt động hoàn hảo. – nanosto

Các vấn đề liên quan