关于GPU的 MAKEFILE

引言

  最近由于更换项目,服务器也被换走,估计一时半会用不到GPU了,因此最近想把前一段时间做的一些工作,整理记录一下。

  实验室采用的GPU有两款:

  1. 服务器上的板卡:NVIDIA的Tesla K20C

  2. 嵌入式开发板: 丽台代工的Tegra K1 

      软件环境为 RHEL6.5 Linux系统 +  CUDA 6.5

首先,附上自己写的一个MAKELIFE文件

MAKEFILE

#Location of the CUDA Toolkit
CUDA_PATH ?= "/usr/local/cuda-6.5"
GCC ?= g++
NVCC := $(CUDA_PATH)/bin/nvcc -ccbin $(GCC)
 
#internal flags
NVCCFLAGS := -m64      #64位机器
NVCCFLAGS += -g -G -lfftw3f
# -G 是加调试
# -lfftw3f 是加fftw3f的库
 CCFLAGS := $(NVCCFLAGS) -Xcompiler -fopenmp
 LDFLAGS := $(CCFLAGS) -lcudart -L /usr/local/cuda-6.5/lib64/
 
#Common includes and paths for CUDA
INCLUDES := -I /usr/local/cuda-6.5/samples/common/inc -I /usr/local/cuda-6.5/include
 
LIBRARIES := -lcudadevrt -lcufft_static-lculibos
 
CUDACCFLAGS := -shared -Xcompiler -fPIC
 
#####################################################################################
 
target = object   
 
#源文件
src-cpp = $(wildcard ./src/*.cpp)
src-cu   = $(wildcard ./src/*.cu)
#wildcard 是在某个目录下查找
src-cpp-nodir = $(notdir $(src-cpp))
src-cu-nodir   = $(notdir $(src-cu))
#notdir 是在查找返回的文件里去除目录的信息
objs-cpp-o = $(patsubst %.cpp, %.o, $(src-cpp-nodir))
objs-cu-o  = $(patsubst %.cu, %.o, $(src-cu-nodir))
objs-o   =  $(objs-cu-o)$(objs-cpp-o)
#patsubst 是替换
 
#Target rules
all : $(target)
 
$(objs-cu-o) : $(src-cu)
     $(EXEC)$(NVCC)$(INCLUDES)$(CCFLAGS) -c $(src-cu)
$(target) : $(objs-o)
     $(NVCC) -o $(target)$(objs-o)$(LDFLAGS)$(LIBRARIES)
clean:
     rm -f $(target)$(objs-o)

  本MAKEFILE,用于在Linux系统中,定义整个工程的编译规则。

  一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,MAKEFILE定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为MAKEFILE就像一个Shell脚本一样,其中也可以执行操作系统的命令。

  巧妙的利用wildcard notdir parsubst 这三个指令,可以很方便的在指定目录下搜素、查找替换等操作,就避免了一个个文件名输入来说明编译关系。

原文地址:https://www.cnblogs.com/zhubinwang/p/4801257.html