15_makefile
makefile
makefile的概述
gcc a.c b.c c.c -o main
如果只修改了b.c 使用gcc编译 需要对所有文件重新编译
make是个命令, 是个可执行程序, 用来解析makefile 文件的命令
makefile是个文件, 描述了程序的编译规则
采用makefile的好处:
1
简化编译程序的时候输入的命令, 编译的时候只需要敲make命令即可
2
可以节省编译时间, 提高编译效率
makefile语法规则
目标:依赖文件
命令列表
gcc a.c b.c c.c -o main
目标:需要生成的文件
依赖文件:通过依赖文件生成目标文件
main:a.c b.c c.c
gcc a.c b.c c.c -o main
makefile文件
main:02_code.c
gcc 02_code.c -o main
用make命令执行makefile文件
make默认在工作目录寻找GNUmakefile, makefile, Makefile的文件作为makefile输入文件
make -f 自定义makefile文件名
若使用make命令没有指定目标, 则make工具默认实现makefile文件夹中的第一个目标, 然后退出
make 目标 //指定运行哪一个目标
makefile 变量
自定义变量
变量名=变量值
引用变量: $(变量名)或${变量名}
num = 10
${num} //10
cc = gcc
exec = main
obj = main.o fun.o
${exec}:${obj}
${cc} ${obj} -o ${exec}
${exec}.o:main.c
${cc} -c main.c -o main.o
fun.o:fun.c
${cc} -c fun.c -o fun.o
clean:
rm *.o ${exec}
test: main.c fun.c
${cc} main.c fun.c -o test
系统环境变量
make可以识别系统环境变量, 在makefile中直接读取或修改拷贝后的变量
查看环境变量: env
预定义变量
%自动匹配
//通用makefile
cc=gcc
exec=main
obj=main.o fun.o
flags=-Wall -lm
${exec}:${obj}
${cc} $^ -o $@ ${flags}
%.o:%.c
${cc} -c $< -o $@ ${flags}
clean:
rm ${} ${exec}
test: main.c fun.c
${cc} main.c fun.c -o $@