我有一个构建库的项目,我想为它添加一些cuda支持.
结构是:
| Basedir
| _subdir1
| _subdir2
CMakeLists.txt文件的基本结构:(subdir2并不重要).
in Basedir:
cmake_minimum_required(VERSION 2.6)
PROJECT(myproject)
find_package(CUDA)
INCLUDE_DIRECTORIES(${MYPROJECT_SOURCE_DIR})
ADD_SUBDIRECTORY(subdir1)
ADD_SUBDIRECTORY(subdir2)
Run Code Online (Sandbox Code Playgroud)
在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)
Run Code Online (Sandbox Code Playgroud)
我实际上并不知道如何将cuda-support放入其中.我想用file2.cu替换file2.cpp并且我这样做了,但它没有构建.cu文件,只构建了cpp文件.
我是否必须添加CUDA_ADD_EXECUTABLE()以包含任何cuda文件?然后我如何将其链接到其他文件?
我尝试将以下内容添加到subdir1中的CMakeLists.txt:
CUDA_ADD_EXECUTABLE(cuda file2.cu OPTIONS -arch sm_20)
Run Code Online (Sandbox Code Playgroud)
这将编译文件,但构建一个可执行文件cuda.如何将其链接到mylib?只是用?:
TARGET_LINK_LIBRARIES(cuda mylib)
Run Code Online (Sandbox Code Playgroud)
我不得不承认我没有cmake的经验,但我猜你想的那样.
jet*_*t47 13
你可以CUDA_ADD_LIBRARY
用于mylib
项目.它适用CUDA_ADD_EXECUTABLE
于图书馆.
CUDA_ADD_LIBRARY(mylib SHARED
file1.cpp
file2.cu
file3.cpp
OPTIONS -arch sm_20
)
TARGET_LINK_LIBRARIES(mylib ${CUDA_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)