15_makefile

发布时间 2023-09-08 09:13:35作者: 爱吃冰激凌的黄某某

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

预定义变量

image-20230908080209621

%自动匹配

//通用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 $@