如何使用CMake分别编译*.cpp和*.cu



我想要实现一个矩阵类,并且我想要使用CUDA来加速矩阵乘法。但是当我试图编译源文件时。我遇到了一些问题。我知道我需要使用NVCC来编译*.cu。但我不知道如何编写CMakeLists.txt来同时编译*.cu和*.cpp。我在谷歌上尝试了很多方法,但都不起作用。这是我当前的CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project(Project_4 LANGUAGES CXX CUDA)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CUDA_STANDARD 14)
set(CMAKE_BUILD_TYPE RELEASE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ")
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build)
find_package(CUDA REQUIRED)
include(FindCUDA)
include_directories(${CUDA_INCLUDE_DIRS})
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} -gencode arch=compute_30,code=sm_30)
include_directories(include)
aux_source_directory(src DIR_SRCS)
file(GLOB cu *.cu)
cuda_add_executable(cuda ${DIR_SRCS} ${cu})
add_executable(Project_4 ${DIR_SRCS})
set_target_properties(Project_4 PROPERTIES
CUDA_SEPARABLE_COMPILATION ON)

然后在编译时,它将报告CMake Error at cuda_generated_ cuda_helper.cu.o.RELEASE.cmake:282。如果我用这种方式编写CMakeLists.txt:

cmake_minimum_required(VERSION 3.16)
project(Project_4 LANGUAGES CXX CUDA)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CUDA_STANDARD 14)
set(CMAKE_BUILD_TYPE RELEASE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ")
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build)
include_directories(include)
aux_source_directory(src DIR_SRCS)
find_package(CUDA REQUIRED)
include_directories(${CUDA_INCLUDE_DIRS})
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} -gencode arch=compute_30,code=sm_30)
add_executable(Project_4 ${DIR_SRCS})
set_target_properties(Project_4 PROPERTIES
CUDA_SEPARABLE_COMPILATION ON)

然后它将在我调用内核函数的位置报告错误error: expected primary-expression before "<" token
我在网上搜索了很长时间。但没有用。请帮助或尝试给出一些如何实现这一目标的想法。我会非常感激的。谢谢

我为您创建了一个示例。它不是基于你的cmake。但它对我有用,也许对你有帮助。
  1. clone repo:git clone-b cmake_cuda_examplehttps://github.com/werto87/durak_computer_controlled_opponent.git

  2. install:conan依赖项管理器

  3. 安装:cuda工具包

  4. 在"内部"创建一个名为build的空文件夹;durak_computer_controlled_对手";文件夹

  5. 进入这个文件夹并进入终端运行";conan安装--build missing";

  6. cmake。。

  7. cmake——构建。

最新更新