跟我一起写Makefile

GNU make工作时的执行步骤如下:

1、读入所有的Makefile
2
、读入被include的其它Makefile
3
、初始化文件中的变量。
4
、推导隐晦规则,并分析所有规则。
5
、为所有的目标文件创建依赖关系链。
6
、根据依赖关系,决定哪些目标要重新生成。
7
、执行生成命令。

1-5步为第一个阶段,6-7为第二个阶段。第一个阶段中,如果定义的变量被使用了,那么,make会把其展开在使用的位置。但make并不会完全马上展开,make使用的是拖延战术,如果变量出现在依赖关系的规则中,那么仅当这条依赖被决定要使用了,变量才会在其内部展开。下面对makefile的相关问题进行简单介绍:

1Makefile的基本结构

Makefile的一般结构:

target……dependency……

command……

结构中各部分的含义:

1)、target(目标):一个目标文件,可以是Object文件,也可以是执行文件。还可以是一个标签(Label)。

2)、dependency(依赖):要生成目标文件(target)所依赖哪些文件

3)、command(命令):创建项目时需要运行的shell命令(注:命令(command)部分的每行的缩进必须要使用Tab而不能使用多个空格)。

 

Makefile实际上是一个文件的依赖关系,也就是说, target这一个或多个的目标文件依赖于dependency中的文件,其生成规则定义在命令command中。如果依赖文件(dependency)中有一个以上的文件比目标(target)文件要新的话,shell命令(command)所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容.

下面是一个实例:

#witten by xf.
CC=gcc
CFLAGS=
CFILES=$(wildcard *.c)
OBJS=$(CFILES:%c=%o)
all:hello

hello:$(OBJS)
        $(CC) $(CFLAGS) -o hello $(OBJS)
.c.o:
        $(CC) -c $<
subsystem:
        cd sub && $(MAKE)

clean:
        rm -f *.o hello

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值