学习makefile语法(1)

来源:互联网 发布:广告铃声制作软件 编辑:程序博客网 时间:2024/05/21 10:38

<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或命令行中被提及,在最后会自动的清除中间对象文件。

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

双冒号规则:

目标::前提

命令

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

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





0 0
原创粉丝点击