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 đó.
Cảm ơn giải pháp dễ dàng đó! Hoạt động hoàn hảo. – nanosto