CMAKE 编译CUDA的设置——CMakeLists.txt的编写

CMAKE 编译CUDA的设置,关于CMAKE语法请自行参考官方文档。这里给出CMakeLists.txt的设置。

(1)指定CMAKE最小版本

cmake_minimum_required(VERSION 3.24 FATAL_ERROR)

(2)指定使用的显卡架构,natie为本地显卡,也可指定其他架构

if (NOT DEFINED CMAKE_CUDA_ARCHITECTURES)

set(CMAKE_CUDA_ARCHITECTURES native)

endif()

(3)指定项目名称,且设置编写语言为C++和CUDA(这里的CUDA会启用nvcc编译器)

project(cuda_lib LANGUAGES CXX CUDA)

(4)指定编译模式方式 ,一般选release速度更快

if (DEFINED CMAKE_BUILD_TYPE)

string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE)

else()

set(CMAKE_BUILD_TYPE RELEASE)

endif()

(5)指定C++版本,并强制使用,不允许降级

set(CMAKE_CXX_STANDARD 14)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

(6)使用CheckLanguage语言检查脚本查看CUDA语言是否可用

include(CheckLanguage)

check_language(CUDA)

(7)利用FindCUDAToolkit脚本,查看是否安装CUDAToolkit

if(NOT CUDAToolkit_FOUND)

include(FindCUDAToolkit)

endif()

(8)包含CUDAToolkit的路径

include_directories(${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})

(9)指定CUDA 版本,并强制使用

set(CMAKE_CUDA_STANDARD 14)

set(CMAKE_CUDA_STANDARD_REQUIRED ON)

(10)使用STREQUAL判断代码编译模式,并指定编译参数

if(${CMAKE_BUILD_TYPE} STREQUAL "RELEASE")

set(NVCC_FLAGS -O3 -Wno-deprecated-gpu-targets)

message(STATUS "${PROJECT_NAME} compile cuda code in release mode")

else()

set(NVCC_FLAGS -G -Wno-deprecated-gpu-targets)

message(STATUS "${PROJECT_NAME} compile cuda code in debug mode")

endif()

(11)遍历符合文件后缀名的文件,文件路径存到source_file

file(GLOB_RECURSE source_file LIST_DIRECTORIES false src/*.cpp src/*.c src/*.cuh src/*.h src/*.cu)

(12)添加名为${PROJECT_NAME}的静态库,静态库元文件为上面遍历的文件

add_library(${PROJECT_NAME} STATIC ${source_file})

(13)设置${PROJECT_NAME} 静态库属性:CUDA_SEPARABLE_COMPILATION为ON表示所有CUDA文件单独编译;CUDA_RESOLVE_DEVICE_SYMBOLS为ON时表示编译器根据需要在可启用设备链接。

set_target_properties(${PROJECT_NAME} PROPERTIES CUDA_SEPARABLE_COMPILATION ON CUDA_RESOLVE_DEVICE_SYMBOLS ON)

(14)为静态库增加编译选项,参考cmake-generator-expressions(7) — CMake 3.23.1 Documentation

target_compile_options(${PROJECT_NAME} PRIVATE $<$<COMPILE_LANGUAGE:CUDA>:

${NVCC_FLAGS}>)

(15)指定CUDA运行时连接库

target_link_libraries(${PROJECT_NAME} PUBLIC CUDA::cudart)

(16)指定安装路径

install(TARGETS ${PROJECT_NAME})

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值