Makefile 使用通配符和stem作为先决条件生成文件
所以我有一个Makefile:Makefile 使用通配符和stem作为先决条件生成文件,makefile,gnu-make,Makefile,Gnu Make,所以我有一个Makefile: broken-%: $(wildcard src/%/*) @echo $* @echo $^ working-%: src/a/* @echo $* @echo $^ > make broken-a a > make working-a a src/a/main.java > $*是%(干)而$^是先决条件 目录结构是 │ Makefile │ └───src └───a
broken-%: $(wildcard src/%/*)
@echo $*
@echo $^
working-%: src/a/*
@echo $*
@echo $^
> make broken-a
a
> make working-a
a
src/a/main.java
>
$*
是%
(干)而$^
是先决条件
目录结构是
│ Makefile
│
└───src
└───a
main.java
使用Makefile:
broken-%: $(wildcard src/%/*)
@echo $*
@echo $^
working-%: src/a/*
@echo $*
@echo $^
> make broken-a
a
> make working-a
a
src/a/main.java
>
这两者应该有相同的输出,但它们没有
由于某种原因,$(通配符src/%/*)
将%
设置为a
时将不返回任何内容。这可能是因为先决条件中的通配符是自动求值的,所以在调用通配符
函数之前先求值src/%/*
有人知道如何使其工作吗?在第二阶段实际应用规则之前,模式不会展开,因此当make第一次解析文件时,您使用文本字符串
src/%/*
调用通配符
可以用来解决这个问题
.SECONDEXPANSION:
broken-%: $$(wildcard src/%/*)
@echo $*
@echo $^