Я хотел бы использовать правило статического шаблона, чтобы указать рецепт по умолчанию для класса целей, но переопределить этот рецепт для нескольких конкретных целей.Переопределить правило статического шаблона в Makefile (без предупреждения)
Вот тривиальный пример, иллюстрирующий то, что я пытаюсь сделать. Для каждого каталога, который содержит файл «test.py» Я хочу, чтобы вызвать команду «run_test.py», кроме случаев, когда каталог называется «один» Я хочу, чтобы вызвать другой набор команд:
TESTS := $(shell find * -name "test.py" | xargs -I {} dirname {})
.PHONY: $(TESTS)
all: $(TESTS)
$(TESTS): %:
python run_test.py [email protected]
one:
python run_test.py [email protected] mode=1
python run_test.py [email protected] mode=2
python check_results.py [email protected]
Это работает, но дает предупреждение:
$ make
Makefile:12: warning: overriding commands for target `one'
Makefile:9: warning: ignoring old commands for target `one'
Есть ли другой способ сделать это или устранить предупреждение?
Мои цели не являются реальными файлами. Я на самом деле получаю список каталогов, которые соответствуют конкретному шаблону, а затем вызывают команду для каждого. Для большинства этих каталогов используется одна и та же команда, но для некоторых я хочу специализировать команду. – moof2k
Просто потому, что они не являются реальными файлами, это не значит, что вы не можете использовать правила шаблонов ...? Если бы вы привели пример, который был ближе к вашему фактическому случаю использования, было бы легче дать совет. Например, если единственная разница между рецептами - это то, что может содержаться в переменной, вы можете использовать целевые переменные для переопределения поведения некоторых целей. – MadScientist
Спасибо за помощь. Я обновил вопрос на примере, который более точно отражает то, что я пытаюсь выполнить. – moof2k