Makefile 如何通过只调用一个命令来构建多个目标?

Makefile 如何通过只调用一个命令来构建多个目标?,makefile,Makefile,我得到了一个如下所示的Makefile: .PHONY: all all: aaa.2 bbb.2 aaa.2 : aaa.1 common.1 create_2 $@ bbb.2 : bbb.1 common.1 create_2 $@ 程序create_2需要很长的启动时间,但是可以一次创建几个%.2文件,因此我只想调用create_2一次 例如,如果common.1已更改,我希望调用create_2 aaa.2 bbb.2,而不是create_2 aaa.2和cre

我得到了一个如下所示的Makefile:

.PHONY: all

all: aaa.2 bbb.2

aaa.2 : aaa.1 common.1
    create_2 $@

bbb.2 : bbb.1 common.1
    create_2 $@
程序create_2需要很长的启动时间,但是可以一次创建几个%.2文件,因此我只想调用create_2一次

例如,如果common.1已更改,我希望调用
create_2 aaa.2 bbb.2
,而不是
create_2 aaa.2
create_2 bbb.2

我在“全部”目标中尝试了
create_2$?
recipe,但没有成功


我正在寻找一个同时使用gmake和clearmake(在gnu兼容模式下)的解决方案。

此黑客可能会帮助您:

.PHONY: all

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

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

如果其中任何文件需要重建,这将导致重建这两个文件。您可能可以使用此黑客,创建
work1
work2
文件,而不是仅创建
work
,并使用更复杂的
if
条件来重建需要重建的内容。至少可以与GNU Make一起使用。

Make基本上是面向文件的,您需要的是面向过程的,所以。。。也许这可以解释这是一个可怕的乱七八糟的事实:

.PHONY: all

all: marker

aaa.2 : aaa.1 common.1
    @touch $@

bbb.2 : bbb.1 common.1
    @touch $@

marker: aaa.2 bbb.2
    create_2 $?
    @touch $@
请注意,
marker
是一个虚拟文件,
aaa.2
bbb.2
的规则触及这些目标,但并不真正重建它们。它很难看,但它确实管用