【问题标题】:How to use CMake to compile *.cpp and *.cu seperately?如何使用 CMake 分别编译 *.cpp 和 *.cu?
【发布时间】:2021-12-19 12:30:23
【问题描述】:

我想实现一个 Matrix 类,我想使用 CUDA 来加速矩阵乘法。但是当我尝试编译源文件时。我遇到了一些问题。我知道我需要使用 NVCC 来编译 *.cu。但我不知道如何编写 CMakeLists.txt 来同时编译 *.cu 和 *.cpp。我尝试了很多在 Google 上找到的方法,但它们都不起作用。这是我当前的 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
我在网上找了很久。但是没有用。请帮助或尝试提供一些想法如何实现这一目标。我会很感激。谢谢。

【问题讨论】:

标签: c++ cmake cuda nvcc


【解决方案1】:

我为您创建了一个示例。它不是基于你的 cmake。但它对我有用,也许对你有帮助。

  1. 克隆仓库:git clone -b cmake_cuda_example https://github.com/werto87/durak_computer_controlled_opponent.git

  2. 安装:conan dependency manager

  3. 安装:cuda toolkit

  4. 在“durak_computer_controlled_opponent”文件夹中创建一个名为 build 的空文件夹

  5. 进入该文件夹并在终端内运行“conan install .. --build missing”

  6. cmake ..

  7. cmake --build .

【讨论】:

    猜你喜欢
    • 2020-02-05
    • 2016-04-29
    • 2023-03-23
    • 2015-06-01
    • 2013-08-18
    • 2017-04-28
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多