我有一个使用OpenCV的C++项目正在运行。 我正在创建一个CMakeLists.txt文件来帮助人们编译它,一切都很顺利。
简而言之:我如何使用CMake创建一个makefile,将“ .cu”文件编译为“ .o”,并使用NVCC将其链接到其他“.o”文件?
更详细的说明: 我想添加一个必须使用NVCC编译的CUDA文件。 我设法手动编译它,但是我不知道如何使用CMake创建一个可以这样做的makefile:
- 如果已安装CUDA工具包,请让NVCC将我的“.cu”文件编译为“.o”文件,在CMake中进行
- 使用此“.o”文件与由g++创建的其他文件
- 不要使用NVCC编译所有项目(如果没有CUDA支持,则仍然可以编译我的项目)
目前,我的内容大致如下:
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)
这将创建一个 .o 文件,但我不知道在哪里/如何使用它。 然后,我计划添加一个标志,例如:
if(HAVE_CUDA)
set (CMAKE_CXX_FLAGS "-DGPU_OPENCV_ENABLE=1")
endif(HAVE_CUDA)
我应该如何在我的C++代码中使用宏来检测标志并调用正确的函数呢?
有什么想法吗?