之前在某项目中看到一个编译openwrt的包裹Makefile,其中有段定义如下:
-
packages_prep :
-
@do-something
-
-
public_pre:@others
-
@do-something
-
-
private_pre:
-
@do-smoething
-
-
menuconfig:packages_prep public_pre private_pre
-
-
kernel_menuconfig:packages_prep public_pre private_pre
-
-
%::
-
@echo "[XXX] $@"
-
@$(MAKE) -C $(PRIVATE_OPENWRT_DIR)/ $@
其中
packages_prep public_pre private_pre 这几个目标是做一些对openwrt 的.config文件以及一些包的定制。主要有一句
%::
定义一个默认目标,之前没见过该使用方法,于是做了几个实验,记录一下:
1, 在该makefile中,该默认目标的的作用是:“除了本makefile定义的目标外,其余传入的目标都转入PRIVATE_OPENWRT_DIR中makefile处理”。 比如输入"make hello", 那么会输出 “[XXX] hello", 并且PRIVATE_OPENWRT_DIR会输出该目标的编译信息(或错误信息)。
2,输入“make menuconfig”时,也会输出“[XXX] menuconfig”。原因是menuconfig目标没有动作。
所以总结起来,该默认目标的功能就是:当输入的目标在当前makefile中没有定义,或者当前目标没有任何行为时,交由默认目标执行动作。
以上是通过简单试验出来的,不一定准确,有详细介绍的请回复。
阅读(3720) | 评论(0) | 转发(0) |