iphone-命令行编译之make和Makefile(二)

<)makefile中的变量

类似c语言中的宏,声明如下:

objects=test1.o test2.o test3.0 test4.o

之后就可以用$(objects)来引用这个变量


<)伪目标文件

.PHONY:clean
chean:
  rm test

.PHONY标签,表示clean是一个伪目标,必须显示的指定在命令中才能执行,比如执行:make chean

 

<)makefile里包含5样东西:显示规则、隐晦规则、变量定义、文件指示、注释

1.显示规则:显示指出要生成的文件、文件依赖、生成命令

2.隐晦规则:自动推导

2.变量定义:当makefile被执行时,其中的变量会被扩展成具体的对象

4.文件指示:一个makefile引入另一个makefile,像c语言的include;根据条件判断有效部分,比如if,then,else;定义多行命令包

5.注释:用#来注释一行

 

<)显式指定makefile文件的文件名

-f参数,例如:

make -f makefileTest

 

<)include其它的makefile

include test.mk

上例,把test.mk文件中的内容,放到上面语言所在位置

 

<)指定文件目录

make -I /usr/local/bin

-I参数,make执行时,到指定的目录去寻找文件

 

<)make执行步骤:

1.读入所有Makefile

2.读入被include的其他makefile

3.初始化变量

4.推导隐晦规则,并分析规则

5.为所有文件建立依赖关系链

6.根据依赖关系,决定哪些目标需要重新生成

7.执行生成命令

1-5为第一阶段,6-7为第二阶段

第一阶段中,定义的变量如果被使用了,make为把他展开在使用的位置

但是是延后展开,如果变量出现在依赖关系中,这条依赖被使用时才展开

 

<)通配符*

"*.o"表示所有的.o文件

clean:
  rm -f *.o

删除所有.o文件

然而*通配符用在变量中时,之能代表"*.o"自己本身,不会展开,如下:

objects=*.o

要想*在变量中展开,等于所有.o文件的集合,必须用关键字wildcard:

objects:=$(wildcard *.o)


<)文件搜索关键字:vpath

vpath  匹配模式 文件路径

比如,所有/usr/test目录下的所有.m文件:

vpath %.m /usr/test

%匹配零个或若干个字符

搜索多个路径,每个目录用":"隔开

 

<)一次生成多个可执行文件

可以用伪目标来实现

当把伪目标做为终极目标,放在一个位置;并为它指定依赖文件,这些依赖文件为将要生成可执行文件

all:test1 test2 tes3
.PHONY:all
tes1:test1.o
  cc -o test1 test1.o
tes2:test2.o
  cc -o test2 test2.o
test3:test3.o
  cc -o test3 test3.o

一次生成test1,test2,test3三个可执行文件

 



posted @ 2012-03-08 16:12  月光的尽头  阅读(1528)  评论(0)    收藏  举报