【发布时间】:2014-08-16 06:58:45
【问题描述】:
我正在为我的 CUDA 6.0 + Boost 1.55.0 + OpenCV 2.4.9 项目开发 64 位 Mac OSX 10.9,使用 makefile 编译,但由于我最终将在 64 位 Windows 8.1 上对其进行测试,所以我以为我会熟悉 CMake。由于我使用的是 C++11,因此我使用 clang++(版本 5.1 (clang-503.0.40),g++ 现在在小牛中链接到)和 CUDA 代码分别使用 nvcc 生成目标文件,然后链接对象文件一起用于我的 makefile 中的最终可执行文件。
我不知道如何在 CMake 中执行此操作。我尝试将 CUDA 代码编译为静态库(同时使用 CMake 内置程序和 FindCUDA.cmake 实用程序),然后链接它,但这不起作用。我一直无法在网上找到考虑到 C++11 的解决方案。
到目前为止,这是我的 CMake 脚本:
cmake_minimum_required(VERSION 2.8)
project(pupil_tracker)
include_directories(include)
include_directories(include/cuda)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall")
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-gencode arch=compute_20, code=sm_20)
#set(CUDA_HOST_COMPILER clang++) # Fails with 'invalid argument '-std=c++11' not allowed with 'C/ObjC''
find_package(Boost COMPONENTS system filesystem REQUIRED)
include_directories(${Boost_INCLUDE_DIR})
find_package(CUDA REQUIRED)
include_directories(${CUDA_INCLUDE_DIRS})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}) # So CMake finds FindOpenCV.cmake
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
CUDA_ADD_LIBRARY(cuda_obj STATIC src/cuda/Tools.cu) # Doesn't seem to work
add_executable(main src/main.cpp src/CenteredHaarFeature.cpp src/PupilTracker.cpp src/Tools.cpp)
target_link_libraries(main ${Boost_LIBRARIES})
target_link_libraries(main ${CUDA_LIBRARIES})
target_link_libraries(main ${OpenCV_LIBS})
target_link_libraries(main ${cuda_obj})
install(TARGETS main DESTINATION ../bin)
如果一切都失败了,我将不得不尝试在我的 Windows 机器上设置一个 MSVC 项目来做同样的事情。
【问题讨论】: