如何使用ROS启用CUDA的单独编译?

时间:2019-03-09 17:07:51

标签: cuda ros

默认情况下,CUDA要求所有设备代码都在一个翻译/编译单元中进行编译,除非您允许对设备代码进行单独的编译/链接。

但是如何在CMakeList.txt中为ROS(或更常见的是CAM)启用它?

以下是我当前的CMakeList文件:

cmake_minimum_required(VERSION 2.8.3)
project(edt)
set(ROS_BUILD_TYPE Debug)
set(CMAKE_BUILD_TYPE Debug)

# Compile as C++11, supported in ROS Kinetic and newer
add_compile_options(-std=c++11)
find_package(catkin REQUIRED COMPONENTS
    roscpp
    rospy
    std_msgs
    )

FIND_PACKAGE(CUDA REQUIRED)
SET(CUDA_NVCC_FLAGS "-arch=sm_61;-g;-G" CACHE STRING "nvcc flags" FORCE)
SET (CUDA_VERBOSE_BUILD ON CACHE BOOL "nvcc verbose" FORCE)


catkin_package(
    INCLUDE_DIRS include
    CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
    )

include_directories(
    include
    ${catkin_INCLUDE_DIRS}
    ${ZED_INCLUDE_DIRS}
    )

cuda_add_executable(
    ${PROJECT_NAME}_node
    src/main.cpp
    src/test.cu
    src/test2.cu
    )

add_dependencies(
    ${PROJECT_NAME}_node
    ${${PROJECT_NAME}_EXPORTED_TARGETS}
    ${catkin_EXPORTED_TARGETS}
    )

## Specify libraries to link a library or executable target against
target_link_libraries(
    ${PROJECT_NAME}_node
    ${catkin_LIBRARIES}
    ${ZED_LIBRARIES}
    )

test2.cu定义了一个在test.cu 中调用的函数(请参阅CMakeList中的 cuda_add_executable ),它当前给出错误,表明无法创建.o文件。

1 个答案:

答案 0 :(得分:1)

这对您有用吗?

set_property(TARGET ${TARGET_NAME}PROPERTY CUDA_SEPARABLE_COMPILATION ON)

以我的理解,这是常见的方式。