Makefile: для каждого файла, оканчивающегося на .ab c, выполнить действие для создания целевого .xyz - PullRequest
0 голосов
/ 15 января 2020

Можете ли вы написать make-файл, который для каждого существующего файла, заканчивающегося на .ab c, создает файл .xyz в соответствии с заданным правилом? Что-то суммировать

1 Ответ

1 голос
/ 15 января 2020

Давайте рассмотрим это поэтапно. Мы начинаем с (что-то вроде) вашего make-файла:

t1.xyz : s1.abc
    do_something s1.abc > t1.xyz

t2.xyz : s2.abc
    do_something s2.abc > t2.xyz

t3.xyz : s3.abc
    do_something s3.abc > t3.xyz

Затем мы используем automati c переменные для удаления некоторой избыточности:

t1.xyz : s1.abc
    do_something $^ > $@

t2.xyz : s2.abc
    do_something $^ > $@

t3.xyz : s3.abc
    do_something $^ > $@

Мы обратите внимание, что все эти рецепты одинаковы, поэтому мы заменяем правила одним шаблоном правила :

t%.xyz : s%.abc
    do_something $^ > $@

Затем мы можем добавить еще несколько функций:

SOME_TARGETS:= t1.xyz t2.xyz t3.xyz
SOME_SPECIAL_TARGETS:= t4.xyz t5.xyz
ALL_POSSIBLE_TARGETS:= $(patsubst s%.abc,t%.xyz,$(wildcard s*.abc))

all: $(ALL_POSSIBLE_TARGETS)

t%.xyz : s%.abc
    do_something $^ > $@

# this overrides the pattern rule for a specific target
t7.xyz : s7.abc
    do_something_special $^ > $@

# this overrides the pattern rule for a list of targets
$(SOME_SPECIAL_TARGETS): t%.xyz : s%.abc
    do_something_special $^ > $@

Возможно немного больше полировки, но это должно занять вас некоторое время.

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