makefile 简单用例

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

#========命令==[		简单示例根据实际修改添加 		]
CC			=	gcc				#c语言编译命令
AR			=	ar				#编译静态库命令
LD			=	ld				#编译动态库命令
RM			= 	rm -rf			#强制删除命令,一般用于删除	.o	文件
#========参数(nameFLAGS) ===================
#C语言编译器参数
CFLAGS		=	-g -Wall	$(HFFLAGS)
#编辑静态库参数		.a	静态库后缀
AFLAGS		=	-r
#编辑动态库参数		.so	动态库后缀
SOFLAGS	=	-fPIC -shared
#FH(head file)头文件路径参数	-I.(当前路径)	默认有:/usr/local/include/	和	/usr/include/
HFFLAGS	=	-I.
#LD(library dir)库路径参数		-L.(当前路径)	默认有:/usr/local/lib/		和	/usr/lib/ 
LDFLAGS	=	-L.		
#LD(library name)库名称参数	-lNAME	等价搜索路径下的 libNAME.a 或 libNAME.so
#非系统默认库必须指明使用那些库	如:libpthread.a	Linux系统下的线程库 
LMFLAGS	=	-lWorld	-lpthread
LDMFLAGS	=	$(LDFLAGS)	$(LMFLAGS)
#优化参数
OFLAGS		=	-O0				
#========目标==============================
#所有生产目标
all			:	libaray	excute  
#编译成库的文件名	如:libWorld.so
libaray		:	libWorld.so
#编程成执行文件的文件名	如:hello
excute		:	hello
#========编译==============================
#%o:%c 旧格式 .c.o:	所有的[.c]文件生成相应的[.o]文件。若生成目标是"a.o b.o",那么"%c"就是"a.c b.c"。
#[Tab]$(CC)则替换为前面赋值的内容,每个命令前面必定为Tab
%o:%c
	$(CC) $(CFLAGS) -c $<	
#编译执行文件
hello	:hello.o	libWorld.so
	$(CC) $(LDMFLAGS)	-o$@  $?
#编译动态库
libWorld.so:World.o
	$(CC) $(SOFLAGS)	-o$@  $?
#可用make -f makefile.steel clear清除
clean:
	$(RM) *.o

#========  以下为解释,非makefile脚本

$@: 规则中的目标名(也就是规则名)。$<:  规则中的依赖项目,只代表规则所有依赖项目中的第一项!$^:  规则中所有的依赖项目。$?:  规则中时间新于目标的依赖项目
make  -f  makefile.linux clear调用clean
make  -f  makefile.linux > log.txt 将编译过程的内容保存在log.txt中