Я предполагаю, что вы имеете в виду тот факт, что вы можете сделать
make hello.o
и make автоматически узнают, как сделать .o
из файла .c
(или даже из .f
или .p
, если таковой существует) - но вы хотите сделать это для пользовательских типов файлов ( скажем, построение .bar
из .foo
.
Самый переносимый способ сделать это следующим образом (в вашем Makefile):
.SUFFIXES: .foo .bar
.foo.bar:
foo2bar -in $> -out $@
Первая строка (.SUFFIXES
) предупреждает, что вы будете относиться к ним как к специальным суффиксам; вторая строка говорит: «Вот рецепт для создания .bar
из .foo
. Третья строка дает команду для выполнения этого - $>
и $@
меняются при помощи make на имена файлов ввода и вывода.
ПРИМЕЧАНИЕ. Отступ для третьей строки ДОЛЖЕН быть символом табуляции.
Гораздо более гибкий метод, который работает только с GNU make, - это использовать его поддержку неявных правил . Если вы можете гарантировать, что будете использовать GNU make, то это, вероятно, рекомендуется.