Предварительные условия для подстановочных знаков соответствия Makefile для правила - PullRequest
0 голосов
/ 25 сентября 2018

Я хочу передать некоторые рецепты в make-файл, например comp1.mt comp2.mt comp3.mt, и сделать так, чтобы make-файл объединял их в единый список MT (это также может быть mt.compN) для их массового запуска.

%.mt:
    @echo $* >> list_of_mts.txt

mt: %.mt
    @cat list_of_mts.txt

Я хочу передать эти рецепты в любом порядке в make-файл, поэтому особый случай вызова make comp1.mt comp2.mt mt нежелателен.

1 Ответ

0 голосов
/ 25 сентября 2018

Я не понимаю, зачем вам это нужно реализовывать в make-файле, но вот вы:

MT_TARGETS:=$(filter %.mt,$(MAKECMDGOALS))

.PHONY: $(MT_TARGETS)
$(MT_TARGETS):
        @echo $@ | sed -e "s:.mt$$::" >> list_of_mts.txt

mt: $(MT_TARGETS)
        @cat list_of_mts.txt

Тестирование:

$ make mt comp1.mt comp2.mt comp3.mt
comp1
comp2
comp3
make: `comp1.mt' is up to date.
make: `comp2.mt' is up to date.
make: `comp3.mt' is up to date.

Для этого используется специальная переменная MAKECMDGOALS.

Примечание: list_of_mts.txt будет бесконечно увеличиваться ...

Примечание2: запись в list_of_mts.txt небезопасна при параллельном выполнении (файл list_of_mts.txt может быть поврежден).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...