所以我有一个 Makefile:
\n\nbroken-%: $(wildcard src/%/*)\n @echo $*\n @echo $^\n\nworking-%: src/a/*\n @echo $*\n @echo $^\nRun Code Online (Sandbox Code Playgroud)\n\n$*是%(主干)并且$^是先决条件
目录结构是
\n\n\xe2\x94\x82 Makefile\n\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80a\n main.java\nRun Code Online (Sandbox Code Playgroud)\n\n使用生成文件:
\n\n> make broken-a\na\n\n> make working-a\na\nsrc/a/main.java\n> \nRun Code Online (Sandbox Code Playgroud)\n\n这两个应该有相同的输出,但事实并非如此。
\n\n由于某种原因$(wildcard src/%/*),%set toa没有返回任何内容。可能是因为先决条件中的通配符是自动评估的,所以src/%/*是在wildcard调用函数之前评估的?
有谁知道如何让它工作?
\n在第二阶段实际应用规则之前,模式不会扩展,因此当第一次通过 make 解析文件时,您将使用wildcard文字 string进行调用src/%/*。
可以使用二次扩展来解决这个问题
.SECONDEXPANSION:
broken-%: $$(wildcard src/%/*)
@echo $*
@echo $^
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1916 次 |
| 最近记录: |