makefile的学习

Makefile的简单例子:

CC=gcc    #定义成变量,方便不同环境的修改。

CFLAGS=-Wall -g -std=c99  #定义成变量,方便不同环境的修改。

LDFLAGS= -lm

RM=rm -f

circle: clrcle.o clircularaea.o  #目标circle,前提circle.o, clircularaea.o

  $(CC) $(LDFLAGS) -o -$@ $^  #转换成shell命令是: gcc -lm -o circle clrcle.o clircularaea.o

circle.o: circle.c    #目标circle.o,前提circle.c

  $(CC) $(CFLAGS) -o $@ -c $<  #转换成shell命令是: gcc -Wall -g -std=c99 -o circle.o  -c clrcle.c 

circulararea.o:circulararea.c

  $(CC) $(CFLAGS) -o -$@ -c $<  #转换成shell命令是: gcc -Wall -g -std=c99 -o circulararea.o -c o:circulararea.c 

.PHONY: clean      #伪目标:目标并未产生的文件名。

clean:

  $(RM) circle circle.o circle.o  #删除生成的文件,没有产生名为clean的目标。

第一个目标必须放在这行的开始,左边没有空白符。而且每个命令都必须以制表符字符开始。

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

自动变量

$@  目标名称

$*  目标文件名的stem,也就是模式规则中%所代表的部分

$<  第一个前提

$^  前提的列表,排除重复的元素

$?  比目标新的前提列表

$+  前提的完整列表,包含重复着

$%  如果目标是链接库的一个成员,变量$%会产生成员名称,不带有链接库的文件名。而$@提供链接库的文件名。

猜你喜欢

转载自www.cnblogs.com/tlong-land/p/9313756.html