Ответ 1
Это выглядит как задание для правила статического шаблона:
$(apps) : % : %.o $(objects)
$(link)
У меня есть множество приложений, которые построены с одним типом правила make:
apps = foo bar baz
all: $(apps)
foo: foo.o $(objects)
$(link)
bar: bar.o $(objects)
$(link)
baz: baz.o $(objects)
$(link)
Если у них было расширение (например, .x
), я мог бы создать правило шаблона, например:
%.x: %.o $(objects)
$(link)
и мне не пришлось бы выписывать новое правило для каждого приложения.
Но у них нет расширения, и я уверен, что:
%: %.o $(objects)
$(link)
не будет работать (поскольку он указывает, что для сборки любого файла вы можете использовать это правило).
Можно ли указать одно правило, которое будет охватывать все правила сборки $(apps)
?
Это выглядит как задание для правила статического шаблона:
$(apps) : % : %.o $(objects)
$(link)
%: %.o $(objects)
$(link)
Вышеуказанное должно работать.
Вы можете ограничить область действия правила, превратив его в правило статического шаблона , чтобы он учитывался только для вашего списка целей:
$(apps) : % : %.o $(objects) # only consider this for $(apps) targets
$(link)
не ответ на то, что вы ищете, но причина, которая может объяснить, почему такой уровень общего кода может не дать хороших результатов.....
статические шаблоны полагаются на наличие стебля для соответствия и построения цепочки зависимостей. почти так же, как и неявные правила (которые используются для целей, которые не имеют никакого рецепта.)
Я вижу, что вы пытались достичь, создавая общее правило, которое будет удовлетворять всем целевым проверкам объекта и ссылки в вашем коде.
что-то вроде этого::
% : % : $(rule1)
echo / generic code ;
чтобы он вызывался для всех приложений в разных сценариях
так как вы не хотите добавлять расширение (это становится корнем некоторых проблем) проблема заключается в том, что цель также будет отражена в зависимости, так как не будет никакого способа дифференцировать зависимости от целей.
следовательно, если вы попытаетесь, я думаю, вы попадете сюда...
$ make -nf mk.t
mk.t:18: *** mixed implicit and static pattern rules. Stop.
:), я дам этому повторить попытку завтра, чтобы посмотреть, могу ли я заставить эту работу работать в общем роде. Хороший вопрос, хотя.