如何多次调用Makefile目标?

gdw*_*dw2 2 makefile

在下面的简单的例子,我想做一个make dist,并在distclean目标之前执行distdebug distrelease.

.PHONY: distclean

dist: distdebug distrelease
    @echo in dist

distdebug: distclean
    @echo in distdebug

distrelease:          
    @echo in distrelease

distclean:
    @echo in distclean
Run Code Online (Sandbox Code Playgroud)

不幸的是,尽管使用.PHONY,distclean只被称为一次:

vagrant@precise32:/tmp$ make dist
in distclean
in distdebug
in distrelease
in dist
Run Code Online (Sandbox Code Playgroud)

我猜Make知道它已经运行了distclean一次,所以它不再运行它.如何让它distclean多次运行?

Mad*_*ist 8

您无法使用常规规则.Make只会一次构建任何给定的目标.您可以使用递归make调用来执行此操作:

distdebug:
        $(MAKE) distclean
        @echo in distdebug
distrelease:
        $(MAKE) distclean
        @echo in distrelease
Run Code Online (Sandbox Code Playgroud)

一般而言,以不同方式规划构建是一个好主意,并且将不同类型的构建的目标放入不同的子目录中.这样你就不必在两者之间进行清理.