Makefile使用通配符和词干用于先决条件

时间:2016-06-03 20:50:25

标签: makefile gnu-make

所以我有一个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/%/*

有谁知道如何使这个工作?

1 个答案:

答案 0 :(得分:2)

在第二阶段实际应用规则之前,模式不会展开,因此首次解析文件时,请使用文字字符串wildcard调用src/%/*

Secondary expansion可用于解决此问题

.SECONDEXPANSION:
broken-%: $$(wildcard src/%/*)
    @echo $*
    @echo $^