MakeFile的一些基本规则就不说了,一些makefile中混用了linux命令和函数,有时候让人摸不着头脑。
下面是一个实际中用到的例子:
例1(使用linux命令):
#SDK MAKEFILE 1.0
DIR:=../..OBJECT:=$(DIR)/lib/libui.a 这是输出的目标文件的路径和文件名
-include $(DIR)/main/Comdef 包含源码中不用#include xxxxxx包含的文件
ALL:LIBALL ARA $(OBJECT) RM make程序只更新makefile中的第一个目标,使用ALL来更新多个目标文件,相当于宏定义
LIBALL:if [ -d ./window ]; then make -C ./window; fi d表示directory [-d dname]表示如果dname这个directory在你的当前目录下存在 则为真
if [ -d ./gui ]; then make -C ./gui; fi 可通过man test来查看对此的具体解释
ARA:ar x ./libgui.a "ar x"或"ar -x"都行,从库中提取成员 (man ar)
ar x ./libwindow.a
$(OBJECT):
ar -r -s $(OBJECT) *.o 指令参数-r: 将文件插入备存文件中 选项参数-s:若备存文件中包含了对象模式,可利用此参数建立备存文件的符号表
# rm *.a -f
rm *.o -f
clean:
if [ -d ./window2 ]; then make clean -C ./window2; fi
if [ -d ./gui5 ]; then make clean -C ./gui5; fi
rm $(OBJECT) -f
###########################################################################
例2 (使用MakeFile函数) :MakeFile函数表参见《跟我一起写MakeFile》第九部分
DIR:=../../..
OBJECT:=../libgui.a
SOURCES:=$(wildcard *.cpp) wildcard:把所有符合描述(*.cpp——也就是所有的文件)的文件名展开成一列,并以空格间隔
DELETE:=$(patsubst %.cpp,%.o,$(SOURCES)) patsubst:第一个参数需要匹配的式样,第二个参数表示用什么来替换它,第三个是空格分隔的需要处理的字符串
DELETE+=$(patsubst %.cpp,%.d,$(SOURCES)) “%”匹配一个或多个字符,这里把SOURCES中所有的cpp文件替换为.o文件,同时还替换为.d文件
-include $(DIR)/main/Comdef
-include $(DIR)/main/build