Это может быть самый небрежный make-файл, который я когда-либо писал.
define template
$(2) : $(1)
echo hi
endef
sources=DATA/L1/fa/L1.fa DATA/L2/fa/L2.fa
$(foreach source,$(sources),$(eval $(call template,$(source),$(subst /fa/,/fb/,$(subst .fa,.fb,$(source))))))
Идея состоит в том, чтобы определить макрос для генерации ваших правил, а затем использовать foreach
и eval
+ call
, чтобы вызвать его один раз для каждого источника. Источник является первым аргументом call
, поэтому он становится $(1)
в макросе. Второй аргумент - это просто преобразование имени исходного файла в имя конечного файла; в макросе оно становится $(2)
.
Замените echo hi
своим собственным правилом, и вы должны быть в порядке. И обязательно напишите хороший четкий комментарий, или когда-нибудь кто-нибудь обязательно появится у вашей двери с бейсбольной битой.