В описании POSIX make
содержится обоснование, которое гласит:
Утилиты
make
в большинстве исторических реализаций обрабатывают предпосылки для цели в левом вправо, и для этого необходим формат файла makefile. Он поддерживает стандартную идиому, используемую во многих make-файлах, которые создают программыyacc
; например:foo: y.tab.o lex.o main.o $(CC) $(CFLAGS) -o $@ t.tab.o lex.o main.o
В этом примере, если
blockquote>make
выбрал любой произвольный порядок,lex.o
не может быть сделан с правильнымy.tab.h
. Хотя могут быть лучшие способы выразить эти отношения, он широко используется исторически. Реализации, которые хотят обновить предварительные требования параллельно, должны требовать явного расширенияmake
или формата файла makefile, как описано ранее.( Я считаю, что
t.tab.o
в строке$(CC)
является опечаткой дляy.tab.o
, но это то, что на самом деле говорит логическое обоснование. )Таким образом, наблюдаемое поведение, которое предпосылки обрабатываются слева направо имеет валидацию здесь, хотя она находится только в разделе Обоснование, а не в главном описании. В Обосновании также упоминаются проблемы с параллельными
make
и т. Д.