cmake混合编译cpp和cuda代码
实际背景
在cpp项目中需要调用一些.cu代码,但是两个代码的编译是不同的:cpp代码使用g++编译,cuda代码使用nvvc编译,因此需要分别编译,再链接,同时需要在cuda侧进行一些简单的封装。
简单例子
目录结构
projectDir
├── CMakeLists.txt(final project)
├── src.cpp
├── ...
├── cudaCode
│ ├── CMakeLists.txt(cuda project)
│ ├── cudaTest.cu
│ └── cudaTest.h
其中cudaTest.h声明了函数,cudaTest.cu,定义了声明cuda的函数体,调用了cuda api
CMakeLists for cuda project
将cuda编译成动态库
cmake_minimum_required (VERSION 3.8 FATAL_ERROR)
project (GpuBTree)
find_package(CUDA 8.0 REQUIRED)
option(CMAKE_VERBOSE_MAKEFILE ON)
option(DGTEST, "DGTEST" ON)
set(CUDA_NVCC_FLAGS -std=c++11)
set (CMAKE_CXX_STANDARD 11)
if (CUDA_VERBOSE_PTXAS)
set(VERBOSE_PTXAS --ptxas-options=-v)
endif (CUDA_VERBOSE_PTXAS)
#set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${
CMAKE_BINARY_DIR}/bin)
set(GENCODE_SM30
-gencode=arch=compute_30,code