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三个可执行文件
                    
                
                
            
        
浙公网安备 33010602011771号