MakeFile中使用linux命令和MakeFile函数

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:
# rm *.a -f

rm *.o -f


.PHONY:clean
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值