清华大佬耗费三个月吐血整理的几百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中