这是一个实践中遇到的问题,关于cmake,涉及opencl和cuda。
我想实现利用cmake构建一个项目,含有opencl和cuda两部分代码。
但是我最后实现的只有opencl部分,cuda部分没有出来。
我通过自己的调试,基本可以排除opencl和cuda代码的问题,opencl代码和cuda代码都单独运行过,正常。应该是cmakelists的问题。但我无法解决,请求帮助,谢谢。
这是tree,其中 main.cpp是opencl代码部分,我是把cuda功能封装,然后在编译opencl是调用cuda模块
功能。
下面是两个CMakeLists
这是编译cuda部分的CMakeLists,即内层。
# CMakeLists.txt for G4CU project
project(gpu)
# required cmake version
cmake_minimum_required(VERSION 2.8)
# packages
find_package(CUDA)
#include_directories ("${PROJECT_SOURCE_DIR}")
# nvcc flags -g for debug
#set(CUDA_NVCC_FLAGS -O3;-G;-g)
#set(CUDA_NVCC_FLAGS -gencode arch=compute_20,code=sm_20;-G;-g)
#set(CUDA_NVCC_FLAGS -gencode arch=compute_52,code=sm_52;-G;-g)
file(GLOB_RECURSE CURRENT_HEADERS *.h *.hpp *.cuh)
file(GLOB CURRENT_SOURCES *.cpp *.cu)
source_group("Include" FILES ${CURRENT_HEADERS})
source_group("Source" FILES ${CURRENT_SOURCES})
cuda_add_library(gpu SHARED ${CURRENT_HEADERS} ${CURRENT_SOURCES})
#cuda_add_library(gpu STATIC ${CURRENT_HEADERS} ${CURRENT_SOURCES})
这是外层CMakeLists,即编译opencl部分,并调用内层编译过的cuda模块,的CMakeLists。
# CMakeLists.txt for G4CU project
project(project)
# required cmake version
cmake_minimum_required(VERSION 2.8)
add_subdirectory(cuda)
set (EXTRA_LIBS ${EXTRA_LIBS} gpu)
ADD_EXECUTABLE(project main.cpp )
target_link_libraries(project ${EXTRA_LIBS} /usr/local/cuda/lib64/libOpenCL.so )
这里有所有相关文件链接,文件夹中文件按照tree来的。
链接:https://pan.baidu.com/s/1hByjrzjROHbIxAdtAxeJIg
提取码:nr1c
我是参考了别人使用cmake混合编译普通c++和cuda的方法,因为opencl是c++的拓展,所以我额外引用了opencl库,这体现在外层的CMakeLists中,可能是这里出了问题。望指教!