1【makefile】简介
1.工程管理工具,主要针对没有集成开发环境的场景。
2.指定目录下编写文件【makefile】或者【Makefile】。
3.在目录下输入【make】调用对应目录下的makefile文件,从而实现对目标文件进行编译。
4.根据【makefile】文件设定的编译规则来编译代码。
2【makefile】工作原理
基本原理:若想生成目标, 检查规则中的所有的依赖文件是否都存在。
依赖文件不存在的情况:
如果有的依赖文件不存在, 则向下搜索规则, 看是否有生成该依赖文件的规则:
如果有规则用来生成该依赖文件,则执行规则中的命令生成依赖文件;
如果没有规则用来生成该依赖文件, 则报错
所有依赖文件均存在的情况:
如果所有依赖都存在, 检查规则中的目标是否需要更新, 必须先检查它的所有依赖,依赖中有任何一个被更新, 则目标必须更新。(检查的规则:时间最大)
3【Makefile】语法
1.格式:
目标:依赖
【tab】命令
即:
要生成的目标文件:依赖的文件
【tab】生成方式
4【makefile】变量
1.自定义变量
变量名=值
OBJ=a.out
2.系统变量
$@ 要生成的文件
$< 第一个依赖的文件
$^ 所有依赖的文件
5【makefile】编写示例
写法示例(1):
a.out:main.c test.c
gcc main.c test.c -o a.out
写法示例(2):
a.out:main.c test.c
gcc $^ -o $@
写法示例(3):
OBJ=minishell
OBJS+=main.c
OBJS+=terminal.c
OBJS+=command.c
OBJS+=record.c
$(OBJ):$(OBJS)
gcc $^ -o $@
.PHONY:
clean:
rm $(OBJ)
install:
sudo cp $(OBJ) /bin
uninstall:
sudo rm /bin/$(OBJ)
写法示例(4):
all:send recv
send:send.c
gcc $^ -o $@
recv:recv.c
gcc $^ -o $@
.PHONY:
clean:
rm send recv