学习makefile语法(1)

<c语言核心技术>Makefile学习:

关于两个文件的makefile:

CC=gcc

CFLAGS = -Wall -g -std=c99

LDFLAGS = -lm

circle:circle.o circulararea.o

$(CC)  $(CFLAGS) -o $@ $^

circle.o:circle.c

$(CC)  $(CFLAGS) -o $@  -c $<

circulararea.o:circulararea.c

$(CC)  $(CFLAGS) -o $@  -c $<

***********************************************************

格式如下:

目标:前提

命令

$@:目标

$^:前提

$<:展开成一个前提

****************************************************************

脚本命令:

当make引用一个规则以建立目标时,此规则中每一行命令都分别以独立的shell实例被分别执行。

*****************************************************

模式规则:

circle.o:circle.c

$(CC)  $(CFLAGS) -o $@  -c $<

circulararea.o:circulararea.c

$(CC)  $(CFLAGS) -o $@  -c $<

可以做如下的一个提换:

circulararea.o circle.o:%.0:%.c

$(CC) $(CFLAGS) -o $@ -c $<

也可以如下写:

%.o:%.c

$(CC) $(CFLAGS) -o $@ -c $<

***********************************************************

后缀规则:

.c.o:

$(CC) $(CFLAGS) -o $@ -c $<

比较老了.

**********************************************************

内置规则:

CC=gcc

CFLAGS = -Wall -g -std=c99

OBJ = circle.o circularea.o

circle:$(OBJ) -lm

*********************************************************

隐式规则链:

目标不具有明显的规则,并带有命令脚步,则make会试着使用隐式规则。从纵多的规则中选一个最先合要求的。

如当前目录只有一个square.c文件:

makefile:

%:%.o

cc -o $@ $^

%.o:%.c

cc -c -o $@ $<

如果中间对象没有在,makefile或命令行中被提及,在最后会自动的清除中间对象文件。

**********************************************************

双冒号规则:

目标::前提

命令

二择一执行:分别测试目标和每一个规则的前提,以决定是否执行此规则的脚本。

**********************************************************





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值