makefile 伪目标
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了makefile 伪目标相关的知识,希望对你有一定的参考价值。
1. makefile的伪目标的目的不是去创建文件,而仅仅通过make指定目标来执行一些特定系统命令或其依赖为目标的规则(如all),称为伪目标。
当clean 不是伪目标的时候,第一次执行会生成clean文件,并且目标下的清除命令会被执行,但是第二次执行时则不会执行,因为当前产生了clean文件。
2伪目标的另一种使用场合时在make的并行和递归执行过程中。
给了例子:
SUBDIRS=foo bar baz
Subdirs:
for dir in $(SUBDIRS)
do
$(MAKE) –C $$dir
done
如果这样写,会出现几个问题:
1、 当子目录执行make出现错误,make不会退出;
2、 使用这种shell的循环方式时,没有用到make对目录的并行处理功能。
有了伪目标就可以解决上面的两个问题。
SUBDIRS=foo bar baz
.PHONY:subdirs $(SUBDIRS)
subdirs: $(SUBDIRS)
$(SUBDIRS):
$(MAKE) –C [email protected]
一般情况下,一个伪目标不作为另一个目标的依赖。当一个伪目标没有作为任何目标的依赖时,我们只能通过make命令来明确指定它为make的终极目标,来执行它所在规则所定义的命令。
还有一个特别的伪目标——all,如果我们在一个目录下创建多个可执行程序,我们可以将所有程序的重建规则在一个makefile中描述。
all: p1 p2 p3
p1:p1.c
p2:p2.c
p3:p3.c
以上是关于makefile 伪目标的主要内容,如果未能解决你的问题,请参考以下文章