2015-02-10 5 views
3

Что значит иметь правило, указанное ниже?Правило makefile «foo: bar: baz»

foo: bar : baz 

Я понимаю, что foo является мишенью, bar и baz являются предпосылками, но почему есть другое двоеточие между bar и baz - в чем смысл этого толстого кишечника?

+0

Действительно ли это говорит ':' там, а не '' '? Если да, то какой диалект? GNU делает отказ. – hvd

+0

@hvd GNU Make 3,82 Построен для x86_64-redhat-linux-gnu – name

+0

Huh. Я попробовал его с помощью «GNU Make 4.0 Built for x86_64-pc-linux-gnu», и я получаю «Makefile: 1: *** target pattern не содержит«% ». – hvd

ответ

4

Эта функция, о которой вы думаете, является static pattern rule, и синтаксис, который вы указываете: foo : bar : baz незакончен; bar часть должен быть модель (то есть он должен содержать символ %).

Tripleee дает разумное объяснение, кроме заявления , когда мы строим foo, bar зависит от baz несколько сбивает с толку. Правило статического шаблона означает, что для каждого слова в целям создайте новое явное правило, в котором цель является результатом применения шаблона шаблона к этому слову с необходимыми условиями Предпосылки.

1

Общий синтаксис

targets: pattern: prerequisites 

Так что это - чрезвычайно упрощенно - пример твой говорит, в основном, когда мы строим foo, bar зависит от baz. Однако второй аргумент должен быть правилом шаблона, поэтому ваш пример на самом деле является синтаксической ошибкой.

Более полезный и правильный пример может быть вдоль линий

$(OBJS): %.o: ick.h 

, который говорит, что если вы строите один из OBJS, их файл .o зависит от ick.h.

+1

_когда мы создаем 'foo',' bar' зависит от 'baz'_, это неправильно. Важно понять, что вопрос совершенно неверен: поскольку hvd говорит выше, это синтаксическая ошибка для использования 'foo: bar: baz'. Слово 'bar' _must_ должно быть _pattern_, а шаблон _must_ соответствует каждому слову в разделе' foo'. Это означает, что «для каждого слова в разделе« foo »создайте новое правило, в котором цель является результатом применения шаблона' bar' к каждому слову, а предварительные условия - 'baz'. – MadScientist

+0

@MadScientist Переведите свой комментарий к новому ответу. – name

Смежные вопросы