Makefile术语一览表

一、术语解析

1.自动化变量

$<:所有的依赖集合,如fs.c,pipe.c。扩展成依靠列表中的第一个依靠文件

$@:规则的目标所对应的所有文件,扩展成当前规则的目的文件名。注:&(OBJECTS)才是所有目标的集合。

$?:

$^:扩展成整个依靠的列表(除掉了里面所有重复的文件名)


$@   扩展成当前规则的目的文件名, $ <   扩展成依靠列表中的第一个依靠文件(如foo.o   :   foo.c   foo.h   bar.h ,则$<代表foo.c),而   $^   扩展成整个依靠的列表(除掉了里面所有重复的文件名)。利用这些变量,我们可以把上面的   makefile   写成: 

[cpp]  view plain copy
  1. ===   makefile   开始   ===   
  2. OBJS   =   foo.o   bar.o   
  3. CC   =   gcc   
  4. CFLAGS   =   -Wall   -O   -g   
  5.   
  6. myprog   :   $(OBJS)   
  7.     $(CC)   $^   -o   $@              //此时,$^代表整个依靠的列表,是foo.c,bar.c(隐规则)???  $@代表myprog吧  
  8.   
  9. foo.o   :   foo.c   foo.h   bar.h   
  10.     $(CC)   $(CFLAGS)   -c   $ <   -o   $@        //{1}lt;代表foo.c,&@代表foo.o  
  11.   
  12. bar.o   :   bar.c   bar.h   
  13.     $(CC)   $(CFLAGS)   -c   $ <   -o   $@   
  14. ===   makefile   结束   ===   

2.关键字

1)wildcard:

比较:objects = *.o  //不展开

            objects := $(wildcard *.o) //展开. 让objects的值是所有.o文件的集合

2)foreach n


3.伪目标.PHONY,clean,all

all     : $(OUTDIR) $(OUTDIR)/$(OUTBINNAME)
.PHONY : all

===============================温馨提示:伪目标=======================================

[cpp]  view plain copy
  1. all : prog1 prog2 prog3   
  2. .PHONY : all   
  3. prog1 : prog1.o utils.o   
  4.  cc -o prog1 prog1.o utils.o   
  5. prog2 : prog2.o   
  6.  cc -o prog2 prog2.o   
  7. prog3 : prog3.o sort.o utils.o   
  8.  cc -o prog3 prog3.o sort.o utils.o   
====================================================================================

3.标签label

4..PHONY : clean     //代表clean是个伪目标文件

5.环境变量MAKEFILES:建议不用,因为它类似于全局变量,会使你所有的Makefile都受其影响。当你的makefile出现怪事时,可以检查环境变量中是否有它。

6.

二、变量定义

这里的变量就像C语言中的宏定义。

[cpp]  view plain copy
  1. #方式一:定义多行变量  
  2. define variable  
  3. value  
  4. value  
  5. endef  
  6. #方式二:  
  7. variable = value  
  8. #方式三:  
  9. variable := value  
  10. #方式四:  
  11. variable += value  
  12. #方式五:  
  13. variable ?= value  
三、通配符

*

?

...

~

%

注意:若文件句中有*,则可以加上转义字符\*

===========     实例解析   ==============

1)*.c与%.c是同义吗?


===================================

四、使用函数

1. $(subst <from>,<to>,<text>) 

把字串text中的from替换成to


2.$(patsubst <pattern>,<replacement>,<text>) 

模式字串替换函数:pattern(模式)

示例: 
   $(patsubst %.c,%.o,x.c.c bar.c) 
  把 x.c.c bar.c符合模式%.c替换成%.o,替换结果为x.c.o bar.


3.


五、其它 

1.文件搜寻

1)

[cpp]  view plain copy
  1. VPATH = src:../headers  

上面指令指定 了两个目录“src”和“../headers”,当然当前目录永远是最先搜索的对象。目录由“:”分开。

2)

[cpp]  view plain copy
  1. vpath %.c foo   
  2. vpath %.c blish   
  3. vpath %.c bar   

上面指令表示先在foo目录中搜索.c文件,然后依次在blish目录,bar目录搜索。

3)

vpath %.h ../headers

上面是模式搜索



六、Makefile规则

target ... : prerequisites ... 
            command

target:是一个目标文件,可以是object file(多个文件),也可以是执行文件,还可以是标签。

prerequisites:是生成 target所需要的文件或目标

======================  温馨提示  ===============================

[cpp]  view plain copy
  1. edit : main.o kbd.o command.o display.o insert.o search.o files.o utils.o   
  2.  cc -o edit main.o kbd.o command.o display.o  insert.o search.o files.o utils.o             //小心观察比较,这里的CC跟的是-o,后面跟的是edit,main.o等。下面的CC跟的是-c,其后                                                                                                                                                         //跟的是.c  
  3. main.o : main.c defs.h   
  4.  cc -c main.c   

==============================================================

七、 让make自动推导

1.只要makefile看到.o文件它就会自动推导找到生成自己的.c文件

自动推导文件及文件所依赖的命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值