2011-05-10 51 views
2

我有一个Makefile如下所示:如何通过只调用一个命令来构建多个目标?

.PHONY: all 

all: aaa.2 bbb.2 

aaa.2 : aaa.1 common.1 
    create_2 [email protected] 

bbb.2 : bbb.1 common.1 
    create_2 [email protected] 

程序create_2需要很长时间才能启动,但可以一次创建多个%。2个文件,因此我想调用create_2只有一次。

例如,如果common.1发生了变化,我希望调用create_2 aaa.2 bbb.2而不是create_2 aaa.2create_2 bbb.2

我尝试了'all'目标中的create_2 $?配方,但没有成功。

我正在寻找与gmake和clearmake(在gnu兼容性模式下)兼容的解决方案。

回答

2

提出的是基本面向文件的,你想要什么东西是面向过程的,所以......也许这借口的事实,这是一个可怕的杂牌组装电脑:

.PHONY: all 

all: marker 

aaa.2 : aaa.1 common.1 
    @touch [email protected] 

bbb.2 : bbb.1 common.1 
    @touch [email protected] 

marker: aaa.2 bbb.2 
    create_2 $? 
    @touch [email protected] 

注意是一个虚拟文件,并且aaa.2bbb.2的规则会触及这些目标,但不会真正重建它们。这很丑陋,但它做到了这一点。

0

本hack可能会帮助你:

.PHONY: all 

all: file1 file2 
>[email protected] [ -f work ]; then \ 
>--->---touch file1 file2; \ 
>--->---echo "touch file1 file 2"; \ 
>---fi 
>---rm -f work 

file1: 
>---touch work 
file2: 
>---touch work 

这将导致这两个文件到其中是否需要重建重建。你可以使用这个破解,创建work1work2文件,而不是只有work,并使用更复杂的if条件来重建需要重建的内容。至少与GNU Make一起工作。