Я хотел бы создать правило, подобное этому в моем Makefile:
log: test_A test_B
./test_A >> [email protected]
./test_B >> [email protected]
но test_A
и test_B
являются частью переменной $ (TESTS)
.
Итак, можно ли сделать действие (здесь: вызов программы) для каждого необходимого условия в GNU/make?
Примечание. Как заставить правило make-файла выполнять свои предпосылки ? не полностью решает эту проблему, поскольку требуется целевой журнал
( сделать журнал
).
По сути, вы хотите перебрать необходимые условия. Очевидный способ сделать это - выложить на оболочку:
log: test_A test_B
for f in $^; do ./$$f; done
Или вы могли бы написать цикл как цикл GNU Make foreach
, хотя вы должны быть осторожны, чтобы команды, которые выходят из тела цикла, отображались в отдельных строках (через define
) или заканчиваются терминатором оболочки (т. е. более чем двоеточие, что проще):
log: test_A test_B
$(foreach f,$^,./$(f);)
Наконец, в этом случае вы могли бы написать его более кратко и более неясно, как замену шаблонов для каждого элемента, который должен быть зациклен:
log: test_A test_B
$(patsubst %,./%;,$^)
(Я уверен, что вы можете добавить перенаправление вывода и переменную $ (TESTS)
, если это необходимо.)