2013-07-18 42 views
2

在下面的简单示例中,我想要执行make dist并且在distdebugdistrelease之前执行了distclean目标。如何获得一个Makefile目标被多次调用?

.PHONY: distclean 

dist: distdebug distrelease 
    @echo in dist 

distdebug: distclean 
    @echo in distdebug 

distrelease:   
    @echo in distrelease 

distclean: 
    @echo in distclean 

不幸的是,尽管使用.PHONY,distclean命令只调用一次:

[email protected]:/tmp$ make dist 
in distclean 
in distdebug 
in distrelease 
in dist 

我猜,让知道它已经运行distclean一次,所以它不会再次运行它。我怎样才能让它多次运行distclean

+0

你的问题帮助我做了相反的事情。我想'distclean'只能在我的情况下被调用一次。 –

回答

8

你不能使用普通规则。 Make只会一次构建任何给定的目标。您可以使用递归建立调用做到这一点:

distdebug: 
     $(MAKE) distclean 
     @echo in distdebug 
distrelease: 
     $(MAKE) distclean 
     @echo in distrelease 

总的来说这是一个好主意,不同地计划你的身材,虽然,对于不同类型的构建投入不同的子目录的目标。这样你就不必在两者之间清理。