Makefile 文件详细介绍

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值