【发布时间】:2015-10-31 02:32:58
【问题描述】:
我有一个使用 OpenCV 的 C++ 项目。我正在创建一个 CMakeLists.txt 文件来帮助人们编译它,一切正常。
简而言之:如何使用 CMake 创建一个 makefile 以使用 NVCC 将“.cu”文件编译为“.o”并将其与其余“.o”文件链接?
长版: 我想添加一个必须用 NVCC 编译的 CUDA 文件。 我设法手动编译它,但我不知道如何使用 CMake 来创建一个 makefile:
- 如果在 CMake 中安装了 CUDA 工具包,则让 NVCC 将我的 .cu 文件编译为 .o 文件
- 将此 .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++ 代码中的 MACRO 中测试该标志以调用好的函数。
有什么想法吗?
【问题讨论】:
-
您的实际问题/问题是什么?你的方法有效吗?如果没有,会发生哪些错误?
-
我列出了我不能做的步骤。我想创建 cmake 文件来自动创建一个好的 makefile。
-
一种解决方案可能是创建一个库并将其链接到我的可执行文件(如下所示:eattardo.com/cmake-and-cuda-library),但我没有找到问题的答案。