概述
一、术语解析
1.自动化变量
$<:所有的依赖集合,如fs.c,pipe.c。扩展成依靠列表中的第一个依靠文件
$@:规则的目标所对应的所有文件,扩展成当前规则的目的文件名。注:&(OBJECTS)才是所有目标的集合。
$?:
$^:扩展成整个依靠的列表(除掉了里面所有重复的文件名)
$@ 扩展成当前规则的目的文件名, $ < 扩展成依靠列表中的第一个依靠文件(如foo.o : foo.c foo.h bar.h ,则$<代表foo.c),而 $^ 扩展成整个依靠的列表(除掉了里面所有重复的文件名)。利用这些变量,我们可以把上面的 makefile 写成:
- === makefile 开始 ===
- OBJS = foo.o bar.o
- CC = gcc
- CFLAGS = -Wall -O -g
- myprog : $(OBJS)
- $(CC) $^ -o $@ //此时,$^代表整个依靠的列表,是foo.c,bar.c(隐规则)??? $@代表myprog吧
- foo.o : foo.c foo.h bar.h
- $(CC) $(CFLAGS) -c $ < -o $@ //{1}lt;代表foo.c,&@代表foo.o
- bar.o : bar.c bar.h
- $(CC) $(CFLAGS) -c $ < -o $@
- === makefile 结束 ===
2.关键字
1)wildcard:
比较:objects = *.o //不展开
objects := $(wildcard *.o) //展开. 让objects的值是所有.o文件的集合
2)foreach n
3.伪目标.PHONY,clean,all
all : $(OUTDIR) $(OUTDIR)/$(OUTBINNAME)
.PHONY : all
===============================温馨提示:伪目标=======================================
- all : prog1 prog2 prog3
- .PHONY : all
- prog1 : prog1.o utils.o
- cc -o prog1 prog1.o utils.o
- prog2 : prog2.o
- cc -o prog2 prog2.o
- prog3 : prog3.o sort.o utils.o
- cc -o prog3 prog3.o sort.o utils.o
3.标签label
4..PHONY : clean //代表clean是个伪目标文件
5.环境变量MAKEFILES:建议不用,因为它类似于全局变量,会使你所有的Makefile都受其影响。当你的makefile出现怪事时,可以检查环境变量中是否有它。
6.
二、变量定义
- #方式一:定义多行变量
- define variable
- value
- value
- endef
- #方式二:
- variable = value
- #方式三:
- variable := value
- #方式四:
- variable += value
- #方式五:
- 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)
- VPATH = src:../headers
上面指令指定 了两个目录“src”和“../headers”,当然当前目录永远是最先搜索的对象。目录由“:”分开。
2)
- vpath %.c foo
- vpath %.c blish
- vpath %.c bar
上面指令表示先在foo目录中搜索.c文件,然后依次在blish目录,bar目录搜索。
3)
vpath %.h ../headers
上面是模式搜索
六、Makefile规则
target ... : prerequisites ...
command
target:是一个目标文件,可以是object file(多个文件),也可以是执行文件,还可以是标签。
prerequisites:是生成 target所需要的文件或目标
====================== 温馨提示 ===============================
- edit : main.o kbd.o command.o display.o insert.o search.o files.o utils.o
- 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
- main.o : main.c defs.h
- cc -c main.c
==============================================================
七、 让make自动推导
1.只要makefile看到.o文件它就会自动推导找到生成自己的.c文件
自动推导文件及文件所依赖的命令
最后
以上就是懵懂砖头为你收集整理的Makefile术语一览表 二、变量定义的全部内容,希望文章能够帮你解决Makefile术语一览表 二、变量定义所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复