1.makefile:
makefile文件是用来管理项目工程文件,通过执行make命令,make就会解析并执行makefile文件。
makefile命名:makefile或者Makefile
1.1makefile的基本规则
#目标:依赖
#(tab)命令
main:main.c fun1.c fun2.c sum.c
gcc -o main main.c fun1.c fun2.c sum.c
main:main.o fun1.o fun2.o sum.o
gcc -o main main.o fun1.o fun2.o sum.o
main.o:main.c
gcc -c main.c -I./
fun1.o:fun1.c
gcc -c fun1.c
fun2.o:fun2.c
gcc -c fun2.c
sun.o:sum.c
gcc -c sum.c
1.2 makefile中的变量
makefile有三种类型变量:
普通变量,自带变量,自动变量。
变量定义直接用=,使用变量用$
foo=abc
bar=$(foo)
几个自带变量
CC= gcc # arm-linux-gcc
CPPFLAGS: C预处理选项 -I
CFLAGS: C编译器的选项 -Wall -g -c
LDFLAGS: 连接器选项 -L -I
自动变量:
# $@: 表示规则中的目标
# $<: 表示规则中的第一个条件
# $^: 表示规则中的所有条件,组成一个列表,以空格隔开,如果有重复选项,则消除重复项。
target = main #自定义变量
objects = main.o fun1.o fun2.o sum.o #自定义变量
CC = gcc #自带变量
CPPFLAGS=-I./ #自带变量
#自动变量只能用在命令中
$(target):$(objects)
$(CC) -o $@ $^
main.o:main.c
$(CC) -c $< $(CPPFLAGS)
fun1.o:fun1.c
$(CC) -c $<
fun2.o:fun2.c
$(CC) -c $<
sun.o:sum.c
$(CC) -c $<
模式规则
%.o:%.c ------------>前后的%必须是相同的
1.3 makefile函数
makefile中的函数有很多,这里介绍两个最常用的:
1. wildcard- 查找指定目录下的指定类型的文件
#wildcard- 查找指定目录下的指定类型的文件
src=$(wildcard *.c) #找到当前目录下所有后缀为.c的文件,赋值给src
#patsubst ---->匹配替换
obj = $(patsubst %c,%.o,$(src)) #把src变量里所有后缀名为.c的文件全部替换成.o
改进的makefile程序
vi makefile
target=main
src=$(wildcard *.c)
objects=$(patsubst %.c,%.o,$(src))
CC=gcc
CPPFLAGS=-I./
$(target):$(objects)
$(CC) -o $@ $^
%.o:%.c
$(CC) -c $< $(CPPFLAGS)
1.4 makefile的清理操作
vi makefile
target=main
src=$(wildcard *.c)
objects=$(patsubst %.c,%.o,$(src))
CC=gcc
CPPFLAGS=-I./
$(target):$(objects)
$(CC) -o $@ $^
%.o:%.c
$(CC) -c $< $(CPPFLAGS)
.PHONY:clean
clean:
rm -f $(objects) $(target)