一,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.o
sum.o:sum.c
gcc -c sum.c -o sum.o
#========================makefile 方法三:=======================
#变量使用
target = main
object = main.o fun1.o fun2.o sum.o
CC = gcc
#头文件
CPPFLAGS = -I./
#生成可执行文件 $@
$(target):$(object)
$(CC) -o $@ $^
#依赖文件检测 **模式匹配**
%.o:%.c
$(CC) -o $@ -g -c $< $(CPPFLAGS)
#========================makefile 方法四:======================
#函数的使用
#源文件.c
src = $(wildcard ./*c)
obj = $(patsubst %.c, %.o, $(src))
#生成文件名
target = main
CC = 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 = main
CC = gcc
#头文件指明
CPPFLAGS = -I./
#生成可执行文件方法:
$(target):$(obj)
$(CC) -o $@ $^
#模式匹配
%.o:%.c
$(CC) -o $@ -c $< $(CPPFLAGS)
#清空二进制文件操作
.PHONY:clean
clean:
# echo "^_^陈丽^_^王蓉^_^"
rm -f $(obj)
* 运行效果图*
三,编译两个可执行文件的makefile的编写
.SUFFIXES: .c .o
CC = gcc
SRCS1 = server.c
SRCS2 = client.c
OBJS1 = $(SRCS1:.c = .o)
OBJS2 = $(SRCS2:.c = .o)
EXE1 = server
EXE2 = client
all: $(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.c
EXE = main
target = ./lib/libsongli.so
CC = gcc
CPPINCLUDE = -I ./include
CPPlib = -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:clean
clean:
@echo "^_^songli^_^大家好^_^"
-rm -rf $(obj1) $(EXE) $(target)