Makefile 的学习

来源:互联网 发布:如何编制软件 编辑:程序博客网 时间:2024/05/01 17:58

一,makefile是linux上的编译的工具

源码: makefile是根据时间来判断文件是否更新了, 如果更新了就是编译它

makefile的编写:依据是 目标 -> 依赖->命令 三步骤

二,简单的编写makefile的几个步骤

#    目标:依赖#    (tab) 命令#==================makefile 编写方法一:===========================main:main.c fun1.c fun2.c sum.c    gcc -o main main.c fun1.c fun2.c sum.c -I./#===================makefile 编写方法二:==========================#目标文件:依赖.o文件main:main.o fun1.o fun2.o sum.o    gcc main.o fun1.o fun2.o sum.o -o main#依赖.o文件:检测文件的时间差  头文件的依赖文件main.o:main.c    gcc -c main.c -o main.o -I./fun1.o:fun2.c    gcc -c fun1.c -o fun1.o fun2.o:fun2.c    gcc -c fun2.c -o fun2.osum.o:sum.c    gcc -c sum.c -o sum.o#========================makefile  方法三:=======================#变量使用target = mainobject = main.o fun1.o fun2.o sum.oCC = gcc#头文件CPPFLAGS = -I./#生成可执行文件 $@$(target):$(object)    $(CC) -o $@  $^#依赖文件检测  **模式匹配**%.o:%.c    $(CC) -o $@ -g -c $<  $(CPPFLAGS) #========================makefile   方法四:======================#函数的使用#源文件.csrc = $(wildcard ./*c)obj = $(patsubst %.c, %.o, $(src))#生成文件名target = mainCC = gcc#头文件CPPFLAGS = -I./#生成可执行文件$(target):$(obj)    gcc -o $@  $^#模式匹配%.o:%.c    gcc -o $@ -c $< $(CPPFLAGS) #=========================makefile 方法⑤=========================#加clean#找到所有的.c文件src = $(wildcard ./*.c)obj = $(patsubst %.c, %.o, $(src))#生成可执行文件target = mainCC = gcc#头文件指明CPPFLAGS = -I./#生成可执行文件方法:$(target):$(obj)    $(CC) -o $@ $^#模式匹配%.o:%.c    $(CC) -o $@ -c $< $(CPPFLAGS)#清空二进制文件操作.PHONY:cleanclean:#   echo "^_^陈丽^_^王蓉^_^"    rm -f  $(obj) 

* 运行效果图*

这里写图片描述

三,编译两个可执行文件的makefile的编写

.SUFFIXES: .c .oCC = gccSRCS1 = server.cSRCS2 = client.cOBJS1 = $(SRCS1:.c = .o)OBJS2 = $(SRCS2:.c = .o)EXE1 = serverEXE2 = clientall: $(OBJS1) $(OBJS2)    $(CC) -o $(EXE1) $(OBJS1) -Wall -g    $(CC) -o $(EXE2) $(OBJS2) -Wall -g    @echo '^_^ ^_^ 陈丽 ^_^ ^_^'#模式匹配%.c%.o:    $(CC) -Wall -g -o $@ -c $^#clean 清空二进制文件clean:    -rm -f $(OBJS)    -rm -f core*

四,生成动态库的制作

src1 = $(wildcard ./src/*.c)# 第一参数是第二个参数的生成文件obj1 = $(patsubst ./src/%.c, ./obj/%.o, $(src1))SRCS = main.cEXE = maintarget = ./lib/libsongli.soCC = gccCPPINCLUDE = -I ./includeCPPlib = -L ./lib/CPPSO = -lsongli#主程序ALL:$(target)    $(CC) -o $(EXE) $(SRCS)  $(CPPINCLUDE) $(CPPlib)  $(CPPSO)#动态库的$(target):$(obj1)    $(CC) -shared -o $(target)  $(obj1) #模式匹配./obj/%.o :./src/%.c    $(CC) -c $< -o $@ -fPIC $(CPPINCLUDE)#清除工作.PHONY:cleanclean:    @echo "^_^songli^_^大家好^_^"    -rm -rf $(obj1) $(EXE) $(target)
原创粉丝点击