[linux专题] 关于makefile 编写的详解

目录

1.为什么需要makefile

2.makefile基本的格式

3.makefile 工作流程

4.基本写法案例

5.升级写法案例

6. 常用工程写法案例

7.基础语法备查


1.为什么需要makefile

主要是项目比较大时,方便多人一起开发,管理和编译工程。

2.makefile基本的格式

target: prerequisites

     cmd

3.makefile 工作流程

-step1:读入所有的makefile。
-step2:读入被include的其它makefile。
-step3:初始化文件中的变量。
-step4:推导隐晦规则,并分析所有规则。
-step5:为所有的目标文件创建依赖关系链。
-step6:根据依赖关系,决定哪些目标要重新生成。
-step7:执行生成命令

4.基本写法案例

    有一个工程,三个 .c文件,分别为 main.c   add1.h  add1.c   add2.h  add2.c ,需要编译生成一个  add.out 的可执行文件

按照格式 编写如下:

#格式
#target:prerequisites
#    cmd
#

add.out : main.o  add1.o  add2.o
    gcc main.o add1.o add2.o -o add.out

main.o : main.c
    gcc main.c -c -Wall -g -o main.o

add1.o : add1.c
    gcc add1.c -c -Wall -g -o add1.o

add2.o : add2.c
    gcc add2.c -c -Wall -g -o add2.o

    编写makefile后,只有生成的文件被修改后,才会需要重新编译。

但是我们经常想要重新编译,这个时候,我们会在makefile中,增加一条命令clean命令,见如下代码。

#格式
#target:prerequisites
#    cmd
#

add.out : main.o  add1.o  add2.o
    gcc main.o add1.o add2.o -o add.out

main.o : main.c
    gcc main.c -c -Wall -g -o main.o

add1.o : add1.c
    gcc add1.c -c -Wall -g -o add1.o

add2.o : add2.c
    gcc add2.c -c -Wall -g -o add2.o

clean:
    rm *.o add.out -rf

5.升级写法案例

基本写法只是为了更好让我们理解编译过程,但是文件之间的关联关系需要自己去区分,当工程足够大的时候,对我们来说管理太复杂了,因此需要进一步说明升级写法。

同样基于上面案例说明

高级写法的特点之一,就是用变量以及通配符匹配的一些方式,来省略我们自己去手动区分管理文件关联关系。

如上面 我们定义变量 OBJS = main.o add1.o add2.o   ,取变量的值使用符号 $   ,其中注意下 变量RM 相关于 rm -f

变量替换方式案例

#格式
#target:prerequisites
#    cmd
#

OBJS = main.o  add1.o  add2.o
CC = gcc
CFLAGS += -c -Wall -g

add.out : $(OBJS)
    $(CC) $(OBJS) -o add.out

main.o : main.c
    $(CC) main.c $(CFLAGS) -o main.o

add1.o : add1.c
    $(CC) add1.c $(CFLAGS) -o add1.o

add2.o : add2.c
    $(CC) add2.c $(CFLAGS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值