核心规则
edit : main.o command.o abc.o
gcc -o edit command.o main.o abc.o
main.o : main.c defs.h command.h
gcc -c main.c
abc.o : abc.c
gcc -c abc.c
command.o : command.c command.h
gcc -c command.c
clean:
rm edit main.o command.o abc.o
#编译链接过程
#编译:gcc -c 生成.o目标文件,过程中会去检查基本语法正确
#链接: gcc -o 生成.out可执行文件,过程中主要链接函数和全局变量
#makefile核心规则
#target:prerequisites
# command
#target是目标文件 prerequisites是依赖项 command是命令
#command前面要一个tab分割,不然会报错(遗漏分隔符 。 停止)
#prerequisites没有时,make参数args没有target时,不执行command
#prerequisites比target文件新,执行command
#make命令带参数,执行目标:生成第一个目标文件,过程中挨个生成依赖目标文件
变量
obj = main.o command.o abc.o
edit : $(obj)
gcc -o edit $(obj)
main.o : main.c defs.h command.h
gcc -c main.c
abc.o : abc.c
gcc -c abc.c
command.o : command.c command.h
gcc -c command.c
clean:
rm edit $(obj)
#变量 类似c语言的宏定义
自动推导
obj = main.o command.o abc.o
edit : $(obj)
gcc -o edit $(obj)
clean:
rm edit *.o
#make自动推导 make会自动推导执行目标文件的编译,例如main.o 会推导出 cc -c -o main.o main.c
vpath VPATH关键字
CC = gcc
#VPATH = abc command defs
vpath %.h defs
vpath %.h abc
vpath %.h command
vpath %.c command
vpath %.c abc
CFLAGS = -I abc -I command -I defs
obj = main.o command.o abc.o
.PHONY : clean
edit : $(obj)
gcc -o edit $(obj)
%.o:%.c
$(CC) $(CFLAGS) -c $<
clean :
rm edit *.o
#make 文件搜寻 VPATH 仅仅只是指定make的搜索路径和编译程序无关,当前目录优先级最高
#$< 依赖目标集 %.c
# vpath 指定匹配规则 和目录,然后根据匹配规则查找
# .PHONY 作用是不把它们当作文件目标,并不能忽略它们成为默认终极目标(看到的第一个目标)