Makefile 如何通过只调用一个命令来构建多个目标?
我得到了一个如下所示的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
.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
的规则触及这些目标,但并不真正重建它们。它很难看,但它确实管用