栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【ubuntu下编译运行cuda程序,如何编写Makefile】

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【ubuntu下编译运行cuda程序,如何编写Makefile】

文章目录
  • 前言
  • 一、文件目录结构
  • 二、Makefile具体内容


前言

记录在ubuntu系统下编译运行cuda程序时,如何编写Makefile。


一、文件目录结构


Makefile 与src文件夹处于同一级,cu文件和cpp文件放到src中。

二、Makefile具体内容

代码如下:

cpp_srcs := $(shell find src -name "*.cpp")
cpp_objs := $(patsubst %.cpp,%.o,$(cpp_srcs))
cpp_objs := $(subst src/,objs/,$(cpp_objs))

cu_srcs := $(shell find src -name "*.cu")
cu_objs := $(patsubst %.cu,%.cuo,$(cu_srcs))
cu_objs := $(subst src/,objs/,$(cu_objs))

# 定义名称参数
workspace := workspace
binary := pro

# 定义头文件 库文件 和链接目标
include_paths := /usr/local/cuda-10.2/include
library_paths := /usr/local/cuda-10.2/lib64
link_librarys := cudart

# 定义编译选项
cpp_compile_flags := -m64 -fPIC -g -O0 -std=c++11
cu_compile_flags := -m64 -g -O0 -std=c++11

# 对头文件 库文件 和链接目标统一加-I -L -l
# -L 指定链接目标时查找的目录
# -l 指定链接的目标名称, 符合libname.so, -lname 规则
# -I 指定编译时头文件查找目录
rpaths 		  := $(foreach item,$(link_librarys),-Wl,-rpath=$(item))
include_paths := $(foreach item,$(include_paths),-I$(item))
library_paths := $(foreach item,$(library_paths),-L$(item))
link_librarys := $(foreach item,$(link_librarys),-l$(item))

# 合并选项
cpp_compile_flags += $(include_paths)
cu_compile_flags  += $(include_paths)
link_flags        := $(rpaths) $(library_paths) $(link_librarys)

# 定义cpp的编译方式
# $@  生成项
# $<  依赖项第一个
# $^  依赖项所有
# $?  $+
objs/%.o : src/%.cpp
	@mkdir -p $(dir $@)
	@echo Compile $<
	@g++ -c $< -o $@ $(cpp_compile_flags)

# 定义cuda文件的编译方式
objs/%.cuo : src/%.cu
	@mkdir -p $(dir $@)
	@echo Compile $<
	@nvcc -c $< -o $@ $(cu_compile_flags)

# 定义workspace/pro文件的编译
$(workspace)/$(binary) : $(cpp_objs) $(cu_objs)
	@mkdir -p $(dir $@)
	@echo Link $@
	@g++ $^ -o $@ $(link_flags)

# 定义pro快捷编译指令,这里只发生编译,不执行
pro : $(workspace)/$(binary)

# 定义编译并执行的指令, 并且执行目录切换到workspace下
run : pro
	@cd $(workspace) && ./$(binary)

debug : 
	@echo $(cpp_objs)
	@echo $(cu_objs)

clear : 
	@rm -rf objs $(workspace)/$(binary)

# 指定伪标签,作为指令
.PHONY : clean debug run pro


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/884621.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号