Для чего нужны правила двойного двоеточия в Makefile?

Раздел 4.13 руководства GNU Make описывает так называемые правила с двумя двоеточиями:

Правила с двумя двоеточиями - это правила, записанные с помощью символа «::» вместо «:» после имени цели. Они обрабатываются иначе, чем обычные правила, когда одна и та же цель встречается более чем в одном правиле.

Когда цель появляется в нескольких правилах, все правила должны быть одного типа: все обычные или все с двойным двоеточием. Если они имеют двойное двоеточие, каждый из них не зависит от других. Команды каждого правила с двойным двоеточием выполняются, если цель старше, чем любые предварительные требования этого правила. Если для этого правила нет предпосылок, его команды всегда выполняются (даже если цель уже существует). Это может привести к выполнению ни одного, любого или всех правил с двойным двоеточием.

Правила с двумя двоеточиями с одной и той же целью фактически полностью отделены друг от друга. Каждое правило с двойным двоеточием обрабатывается индивидуально, так же как обрабатываются правила с разными целями.

Правила с двойным двоеточием для цели выполняются в том порядке, в котором они появляются в make-файле. Однако в тех случаях, когда правила с двойным двоеточием действительно имеют смысл, порядок выполнения команд не имеет значения.

Правила с двумя двоеточиями несколько неясны и не всегда очень полезны; они обеспечивают механизм для случаев, когда метод, используемый для обновления целевого объекта, различается в зависимости от того, какие файлы предварительных требований вызвали обновление, и такие случаи редки.

Каждое правило с двумя двоеточиями должно указывать команды; в противном случае будет использоваться неявное правило, если оно применяется. See section Использование неявных правил.

Я как бы разбираюсь в значении каждого предложения в этом разделе по отдельности, но мне все еще не ясно, какие правила двойного двоеточия предназначены для . Что касается редкости, я еще не видел ни одного проекта с открытым исходным кодом, Makefile которого не начинался с

all::

Следовательно: Какова предполагаемая цель правил с двойным двоеточием в Makefile?

31
задан lindelof 25 October 2011 в 14:45
поделиться