Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake:如何将cuda添加到现有项目中_Cuda_Cmake - Fatal编程技术网

CMake:如何将cuda添加到现有项目中

CMake:如何将cuda添加到现有项目中,cuda,cmake,Cuda,Cmake,我有一个项目,建立了一个图书馆,我想添加一些cuda支持它 结构如下: |Basedir |_subdir1 |_次曲面2 CMakeLists.txt文件的基本结构:(subdir2不重要)。 在Basedir中: cmake_minimum_required(VERSION 2.6) PROJECT(myproject) find_package(CUDA) INCLUDE_DIRECTORIES(${MYPROJECT_SOURCE_DIR}) ADD_SUBDIRECTORY(subdi

我有一个项目,建立了一个图书馆,我想添加一些cuda支持它

结构如下:

|Basedir
|_subdir1
|_次曲面2

CMakeLists.txt文件的基本结构:(subdir2不重要)。
在Basedir中:

cmake_minimum_required(VERSION 2.6)
PROJECT(myproject)
find_package(CUDA)
INCLUDE_DIRECTORIES(${MYPROJECT_SOURCE_DIR})
ADD_SUBDIRECTORY(subdir1)
ADD_SUBDIRECTORY(subdir2)
在子目录1中:

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)
CUDA_ADD_EXECUTABLE(cuda file2.cu OPTIONS -arch sm_20)
我真的不知道如何把cuda支持放进去。我想用file2.cu替换file2.cpp,我这样做了,但它没有生成.cu文件,只有cpp文件

我是否必须添加CUDA_add_EXECUTABLE()以包含任何CUDA文件?然后如何将其链接到其他文件

我尝试将以下内容添加到子目录1中的CMakeLists.txt:

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)
CUDA_ADD_EXECUTABLE(cuda file2.cu OPTIONS -arch sm_20)
这将编译文件,但会生成一个可执行的cuda。如何将其链接到mylib? 就在这儿吗

TARGET_LINK_LIBRARIES(cuda mylib)

我必须承认,我在cmake方面没有经验,但我想你已经明白了。

你可以使用
CUDA\u ADD\u库
进行
mylib
项目。它作为
CUDA\u ADD\u可执行文件
工作,但用于库

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

TARGET_LINK_LIBRARIES(mylib ${CUDA_LIBRARIES})

对于4年后遇到此问题的任何人,更新:CMake现在已经内置了对CUDA的支持,FindCUDA被认为是不推荐的。看见