Makefile 定义函数 foreach

Makefile 自定义函数 和 foreach的使用。

最近在做项目时,用到了一些开源的组件,这些组件中需要第三方库,每个版本对应的第三方库可能不一样,所以使用源码编译安装时,第一次需要去下载这些包,但是下载比较慢,需要改造Makefile。

Makefile 定义函数来实现这个改造

函数格式

define EXTERNAL_TAR
        ...
endef

调用

deps: $(call EXTERNAL_TAR)

 

因为需要递归解压包,使用了foreach(里面的是临时变量)进行遍历:

代码

EXTERNAL_JSON=external/cJSON/
EXTERNAL_ZLIB=external/zlib/
EXTERNAL_SQLITE=external/sqlite/
EXTERNAL_OPENSSL=external/openssl/
EXTERNAL_LIBYAML=external/libyaml/
EXTERNAL_CURL=external/curl/
EXTERNAL_AUDIT=external/audit-userspace/
EXTERNAL_LIBFFI=external/libffi/
EXTERNAL_CPYTHON=external/cpython/
EXTERNAL_MSGPACK=external/msgpack/
EXTERNAL_PROCPS=external/procps/
EXTERNAL_LIBDB=external/libdb/build_unix/
EXTERNAL_DB=external/libdb/

TAR := tar -zxf

EXTERNAL_RES := cJSON $(CPYTHON) curl libdb libffi libyaml openssl procps sqlite zlib audit-userspace msgpack

define EXTERNAL_TAR
        $(foreach n, $(EXTERNAL_RES), $(TAR) external/$(n).tar.gz  -C external; )
endef

deps:
ifeq ($(wildcard external/*/*),)
	$(call EXTERNAL_TAR)
endif
clean-deps-libs:
	rm -rf $(EXTERNAL_ZLIB) $(EXTERNAL_JSON) ${EXTERNAL_OPENSSL} ${EXTERNAL_LIBYAML} ${EXTERNAL_CURL} ${EXTERNAL_PROCPS} $(EXTERNAL_SQLITE) ${EXTERNAL_AUDIT} ${EXTERNAL_LIBFFI} $(EXTERNAL_MSGPACK) ${EXTERNAL_DB} ${EXTERNAL_CPYTHON}

代码目录结构

make deps :

 

 

 make clean-deps-libs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值