所以我有一个Makefile:
broken-%: $(wildcard src/%/*)
@echo $*
@echo $^
working-%: src/a/*
@echo $*
@echo $^
$*
是%
(词根),$^
是先决条件
目录结构是
│ Makefile
│
└───src
└───a
main.java
使用Makefile:
> make broken-a
a
> make working-a
a
src/a/main.java
>
这些都应该具有相同的输出,但它们不会。
由于某些原因$(wildcard src/%/*)
设置为%
的{{1}}没有返回任何内容。可能是因为先决条件中的通配符是自动计算的,因此在调用a
函数之前会评估src/%/*
?
有谁知道如何使这个工作?
答案 0 :(得分:2)
在第二阶段实际应用规则之前,模式不会展开,因此首次解析文件时,请使用文字字符串wildcard
调用src/%/*
。
Secondary expansion可用于解决此问题
.SECONDEXPANSION:
broken-%: $$(wildcard src/%/*)
@echo $*
@echo $^