Така че имам 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/%/*)
с %
настроен на a
не връща нищо. Това може да се дължи на това, че заместващите символи в предпоставки се оценяват автоматично src/%/*
се оценява преди wildcard
функцията се нарича?
Някой знае ли как да се получи това работи?
Отговори:
2 за отговор № 1Моделите не се разширяват до момента, в който правилото действително се прилага по време на втората фаза, така че когато файлът първо се анализира, wildcard
с буквалния низ src/%/*
.
Вторично разширяване може да се използва за работа около това
.SECONDEXPANSION:
broken-%: $$(wildcard src/%/*)
@echo $*
@echo $^