CMake 入门 (二)--在cmake中使用cuda

本文将以一个最小化的例子,介绍如何在cmake中使用cuda和nvcc,包含以下内容:

  • 使用nvcc进行编译
  • 链接CUDA库(以cublas为例)

该例子将只使用源码加载自定义库,不再使用静态链接库文件。
另外此例子要求已经安装 cuda 12.4 以上版本,并且 nvcc 也是 12.4 以上版本。

目录结构

1
2
3
4
5
6
7
├─main.cpp
├─CMakeLists.txt
├─src
│ └─lb1.cu
├─include
│ └─lib1.h
└─build

CMakeLists.txt 逐行解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
## 版本要求
cmake_minimum_required(VERSION 3.18)

## 语言为 c++ 与 cuda
project(test CUDA CXX)

## 头文件位置
include_directories(./include)

## 寻找并加载CUDA头文件
find_package(CUDA REQUIRED)
include_directories($(CUDA_INCLUDE_DIRS))

## 从源码链接自定义库函数
file(GLOB SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cu")

add_library(MYLIB STATIC ${SOURCES})

## 生成可执行文件
add_executable(t ./main.cu)

## 链接库与cublas
target_link_libraries(t PRIVATE MYLIB)
target_link_libraries(t PRIVATE ${CUDA_LIBRARIES} ${CUDA_cublas_LIBRARY})

代码

CODE

CMake 入门 (一)

本文将以一个最小化的例子,介绍CMake的入门知识,包含以下内容:

  • 加载静态链接库
  • 从源码加载运行库

目录结构

1
2
3
4
5
6
7
8
9
10
├─main.cpp
├─CMakeLists.txt
├─src
│ └─lb1.cpp
├─lib
│ └─liblb2.a
├─include
│ ├─lib1.h
│ └─lib2.h
└─build

CMakeLists.txt 逐行解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
## 版本要求
cmake_minimum_required(VERSION 3.18)

## 语言为 c++
project(test CXX)

## 头文件位置
include_directories(./include)

## 寻找静态链接文件并存入变量 LIB2
find_library(LIB2 liblb2.a ./lib)

## 从源码链接库函数
file(GLOB SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")

add_library(MYLIB STATIC ${SOURCES})

## 生成可执行文件
add_executable(t ./main.cpp)

## 链接库
target_link_libraries(t PRIVATE MYLIB)
target_link_libraries(t PRIVATE ${LIB2})

代码

CODE