一:宏
XX = g++
NVCC = nvcc
CFLAGS = -Wall -O -g
后续的使用中XX表示g++
二:target: prerequisite为依赖关系,即目标文件(target)依赖于前提文件(prerequisite)。可以有多个前提文件,用空格分开。
依赖关系后面的缩进行是实现依赖关系进行的操作,即正常的UNIX命令。一个依赖关系可以附属有多个操作。
%.o:%.cpp
$(XX) \
-I $(COMMON_INC) \ //-I 引入头文件
-I $(CUDA_INC) \
-I $(BOOST_INC) \
-I $(OPENCV_INC) \
-L /usr/local/lib/ //-L引入库文件
-lopencv_core //连接时搜索指定的函数库opencv_core
-c $< -o $@ //-c 只编译并生成目标文件
三:wildcard和patsubst是makefile中几个有用的函数
makefile里的函数使用,和取变量的值类似,是以一个‘$’开始,然后是一个括号里面是函数名和需要的参数列表,多个变量用逗号隔开,像这样
return = $(functionname arg1,arg2,arg3...)。
1.wildcard搜索当前目录下所有以.c,.c++结尾的文件,生成一个以空格间隔的文件名列表,并赋值给SOURCES
SOURCES = $(wildcard *.c *.cpp )
2.patsubst是patten substitude的缩写,匹配替代的意思。这句是在SOURCES中找到所有.cpp 结尾的文件,然后把所有的.cpp换成.o。
OBJS = $(patsubst %.cpp,%.o,$(SOURCES))
参考