Правила по умолчанию в Make - PullRequest
4 голосов
/ 14 июня 2010

Существует ли в make механизм, позволяющий использовать глобальные неявные правила по умолчанию, которые доступны везде, аналогично встроенным правилам?

Make предоставляет некоторые встроенные неявные правила для компиляции файлов C / C ++ / Fortran, даже не требуя Makefile для простых случаев.Однако при компиляции других языков (например, файлов языков программирования Go) всегда требуется Makefile.Я хотел бы расширить мою среду Makeenvironment, чтобы неявные правила были доступны по умолчанию.

Ответы [ 3 ]

6 голосов
/ 14 июня 2010

Обычно это нежелательно, так как ваш Makefile будет менее переносимым; это не сработало бы на чьей-либо машине, если бы она не была настроена таким образом.

Однако, если вы хотите это сделать, создайте где-нибудь «глобальный» Makefile со своими правилами по умолчанию для файлов Go, а затем добавьте его путь к переменной среды MAKEFILES. Этот глобальный Makefile будет обработан перед любым Makefile при запуске «make», как если бы вы указали его источник в верхней части файла.

3 голосов
/ 06 сентября 2010

Хотя я согласен с dmazzoni, я просто добавил свой рецепт изготовления для Go Makefile:

# Include default Golang Make magic
include $(GOROOT)/src/Make.$(GOARCH)

# Hack the following line    
your_program: your_program.$O
    $(LD) -o $@ $^

# Compiles .go-files into architecture-specific binaries
%.$O: %.go
    $(GC) -o $@ $^

clean:
    rm your_program *.$O

(Примечание: $O это DOLLAR + UPPERCASE-o - нетноль!)

Хотя я не проверял его на всех доступных мне машинах, я считаю, что он должен портировать довольно хорошо.

3 голосов
/ 14 июня 2010

Я предполагаю, что вы имеете в виду тот факт, что вы можете сделать

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, то это, вероятно, рекомендуется.

...