Во-первых, ваш wildcard
не будет работать.GNU make использует только базовое глобирование оболочки, что означает, что он не может понимать расширенное глобирование, например **
, что означает «поиск по всем подкаталогам».Во-вторых, %
вообще не является символом, вызывающим оболочку, поэтому вы просто ищете файлы с буквальным названием %.java
.
Вместо этого вы, вероятно, хотите что-то вроде этого:
javaSources := $(shell find src/java -name '*.java')
Далее, для создания javaClasses
контента, который вы действительно не хотите использовать subst
, потому что он заменяет везде, что может дать ложные совпадения (например, $(subst .x,.y,foo.xbar)
даст foo.ybar
, что, вероятно, не то, что вы хотите).
Что-то вроде этого проще понять:
javaClasses := $(patsubst src/java/%.java,$(tempdir)/java/classes/%.class,$(javaSources))
Наконец, вы повторяете точно ту же ошибку, что и в предыдущем вопросе, где вы пытались перечислить все цели и всепредпосылки в том же правиле.Как я уже сказал для этого вопроса, это не правильно.
Ответ точно такой же, как и в предыдущем вопросе: вы должны написать шаблонное правило, которое описывает, как построить одну единственную цель из один единственный исходный файл .
И снова вам нужна цель all
или аналогичная, которая зависит от всех выходов.