Makefile 文件
Linux下:
gcc 编译的时候 不会 检查 文件是否被修改过 直接 所有源文件 重新编译(会造成 大量的重复 编译)
make: 编译的时候 会 检查 文件是否被修改过 只编译 被修改过源文件 (避免 大量的重复 编译)
make:大量代码 的关系维护
知识点2【make的语法】
通过 依赖文件 生成 目标文件。
目标:依赖文件 (只是关系的描述)
命令列表(将依赖文件 生成 目标文件的具体指令)
注意:依赖文件可以是多个。命令 也可以多个
案例1:一个简单的makefile文件
main.c
#include <stdio.h>
#include "main.h"
int main(int argc, char *argv[])
{
printf("hello make world\n");
printf("PI = %lf\n",PI);
return 0;
}
main.h
#define PI 3.14
makefile
main:main.c
gcc main.c -o main
- 当敲make指令的时候 make工具 自动寻找当前路径下的GNUmakefile、makefile/Makefile文件 按照GNUmakefile、makefile/Makefile中规则执行编译。
- 如果 你的makefile文件名是自定义 就需要 -f指明
make 目标名称
makefile
main:main.c
gcc main.c -o main
A:xxx
xxxxxxxxxxx
B:hhh
hhhhhhhhhhh
只敲make 默认执行 第一个目标 然后 退出
如果想执行A目标:make A
如果想执行B目标:make B
案例:多定义一个目标(可以没有依赖文件 假想目标)
makefile
main:main.c
gcc main.c -o main
clean:
rm main
复杂的makefile
main.c
#include <stdio.h>
#include "main.h"
#include "printf1.h"
int main(int argc, char *argv[])
{
printf("hello make world\n");
printf("PI=%lf\n",PI);
printf1();
return 0;
}
main.h
#define PI 3.14
printf1.c
#include <stdio.h>
#include "main.h"
void printf1(void)
{
printf("hello printf1 world PI=%lf\n",PI);
return;
}
printf1.h
extern void printf1(void);
makefile
makefile中的变量
1、变量的分类
自定义变量
环境变量
预定义变量
2、自定义变量
案例:多文件makefile第一次升级
exec=main
cc=gcc
obj=main.o printf1.o
cflags=-Wall -g
$(exec):$(obj)
$(cc) $(obj) -o $(exec) $(cflags)
main.o:main.c
$(cc) -c main.c -o main.o $(cflags)
printf1.o:printf1.c
$(cc) -c printf1.c -o printf1.o $(cflags)
clean:
rm $(exec) *.o
3、make工具 给 makefile传值
4、系统环境变量
env查看环境变量
export test=100 将test变量 设置环境变量
5、预定义变量
比较完善的makefile
exec=main
cc=gcc
obj=main.o printf1.o #你要修改的地方
cflags=-Wall -g
$(exec):$(obj)
$(cc) $^ -o $@ $(cflags)
%.o:%.c
$(cc) -c $< -o $@ $(cflags)
clean:
rm $(exec) *.o