Xav*_*nez 5 c++ opencv cuda cmake
我有一个使用 OpenCV 的 C++ 项目。我正在创建一个 CMakeLists.txt 文件来帮助人们编译它,并且一切正常。
简而言之:如何使用 CMake 创建一个 makefile 以使用 NVCC 将“.cu”文件编译为“.o”并将其与其余“.o”文件链接?
长版本:我想添加一个必须使用 NVCC 编译的 CUDA 文件。我设法手动编译它,但我不知道如何使用 CMake 创建 makefile 来执行此操作:
现在,我有这样的事情:
IF(CUDA_FOUND)
MESSAGE( STATUS "I found CUDA !" )
SET(HAVE_CUDA ${CUDA_FOUND} CACHE BOOL "Set to TRUE if CUDA is found, FALSE otherwise")
cuda_compile(CudaKernel CudaKernels.cu)
ENDIF(CUDA_FOUND)
Run Code Online (Sandbox Code Playgroud)
这会创建一个 .o 文件,但我不知道在哪里/如何使用它。
然后我计划添加一个标志,例如:
if(HAVE_CUDA)
set (CMAKE_CXX_FLAGS "-DGPU_OPENCV_ENABLE=1")
endif(HAVE_CUDA)
Run Code Online (Sandbox Code Playgroud)
并在我的 C++ 代码中的宏中测试该标志以调用良好的函数。
任何想法?
好吧,我想通了:
我们可以使用Cmake为cuda部分创建一个目标文件,并在编译结束时将其链接到cpp可执行文件。
cmake_minimum_required(VERSION 2.8)
find_package(CUDA REQUIRED)
IF(CUDA_FOUND)
SET(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-O3 -gencode arch=compute_20,code=sm_20)
cuda_compile(CudaKernel CudaKernels.cu)
cuda_add_library(CudaKernels CudaKernels.cu)
add_definitions(-DGPU_OPENCV_ENABLE)
ENDIF()
Run Code Online (Sandbox Code Playgroud)
在 CMake 的 Cpp 部分中:
target_link_libraries(Executablename
CudaKernels
libraries...)
Run Code Online (Sandbox Code Playgroud)
希望它对某人有帮助!