Makefile文件代码详解
一、Makefile文件
CC = arm-linux-gcc
TARGET = show_jpeg
CONFIG = -Wall -O2
SRCS = show_jpeg.c
IFLAGS = -I./libjpeg/include
LFLAGS = -L./libjpeg/lib
LFLAGS += -ljpeg
OBJS = $(patsubst %.c, %.o, $(SRCS))
$(TARGET):$(OBJS)
$(CC) $^ -o $@ $(IFLAGS) $(LFLAGS) $(CONFIG)
@echo "success:======$(CC) compilation OK===Done==="
%.o:%.c
$(CC) -c $< -o $@ $(IFLAGS) $(LFLAGS) $(CONFIG)
.PHONY: clean
clean:
$(RM) $(TARGET)
$(RM) $(TARGET_AR)
$(RM) $(OBJS)
二、每行代码注解
CC=arm-linux-gcc
系统默认为普通编译工具gcc,需移植裸机运行时,需修改为交叉编译工具arm-linux-gcc,故需要修改CC的变量;
TARGET = show_jpeg
此变量保存生成的目标文件名称;
CONFIG = Wall -O2
打开所有的警告,并设置优先等级为2,优先级越高,编译速度越慢,相对而言程序运行速度越快,调试难度越大。
SRCS = show_jpeg.c
保存含main函数的.c文件;
IFLAGS = -I./libjpeg/include
保存指定头文件的的路径(Makefile当前目录下的libjpeg文件夹的include文件夹下的头文件);
LFLAGS = -L./libjpeg/lib
保存指定库文件的路径(./libjpeg/lib);
LFLAGS += -ljpeg
添加库名;
OBJS = $(patsubst %.c, %.o, $(SRCS))
把所有的.c后缀文件替换为.o后缀文件,保存的是.o文件
*$ (TARGET): $(OBJS)
$(CC) $^ -o $@ $(IFLAGS) $(LFLAGS) $(CONFIG)
@echo “success:====== $ (CC) compilation OK====Done=”***
链接库文件和依赖文件编译生成目标文件,并打印succeed信息到终端,等同于(arm-linux-gcc *.o -o show_jpeg -I./libjpeg/include -L./libjpeg/lib -ljpeg Wall -O2)
%.o:%.c
$(CC) -c $< -o $@ $(IFLAGS) $(LFLAGS) $(CONFIG)
把所有.c文件编程成.o文件(arm-linux-gcc *.c -o *.o -I./libjpeg/include -L./libjpeg/lib -ljpeg Wall -O2)
.PHONY: clean
clean:
$(RM) $(TARGET)
$(RM) $(TARGET_AR)
$(RM) $(OBJS)
.PHONY告诉Makefile不要对clean运用任何隐形规则,需要make clean 才能对删除目标文件和.o文件, $ (RM)相当于rm命令