如何使用cmake编译C ++文件和CUDA文件

时间:2018-11-13 11:17:39

标签: c++ cmake cuda nvcc

我知道如何使用cmake通过cublas之类的cuda函数来编译C ++文件。但是,在我的项目中,有一个我自己编写的内核函数。我看到g ++编译器不知道如何处理内核<<<,>>>。您能帮我解决这个问题吗?以下是我用来用cublas编译C ++文件的CMakeList。

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS_DEBUG "-g")
cmake_minimum_required(VERSION 3.0)

project(GPU_LMM)
find_package(GSL REQUIRED)
find_package(BLAS REQUIRED)
find_package(CUDA)
if (CUDA_FOUND)
    message("CUDA found")
else()
    message("CUDA not found, doing something alternatively")
endif()

include_directories(test_cuda PRIVARE
                ${GSL_INCLUDE_DIRS}
                ${BLAS_INCLUDE_DIRS}
                ${CUDA_INCLUDE_DIRS}
                ${CUDA_CUBLAS_DIRS}
                                    ${PROJECT_SOURCE_DIR})

add_executable(GPU_LMM main.cpp aux.cpp)
target_link_libraries( GPU_LMM  PRIVATE
                    ${GSL_LIBRARY}
                    ${BLAS_LIBRARIES}
                    ${CUDA_LIBRARIES}
                    ${CUDA_CUBLAS_LIBRARIES})

我要编译以下三个文件。

main.cpp aux.cpp aux.hpp

aux.cpp包含cuda内核函数。 谢谢大家!

1 个答案:

答案 0 :(得分:2)

如果必须使用nvcc编译cuda内核,则其扩展名应为.cu,而不是.cpp(因此应为aux.cu)。然后,cmake将使用正确的编译器生成正确的文件。

自cmake 3.10.0起,CUDA支持甚至是原生的,您只需要激活该语言即可。