Это имеет значение в реальных файлах make, потому что вы склонны использовать упакованные правила.Как правило, $<
заменяется обязательным условием first .Таким образом:
compile = g++ -c $< -o $@
x.o : source/x.cpp header/x.h
$(compile)
y.o : header/y.h source/y.cpp
$(compile)
Первое правило будет компилировать source/x.cpp
, как требуется.Второе правило будет пытаться скомпилировать header/y.h
, что определенно не то, что нужно.
Поскольку это гораздо более типичный (и рациональный) способ написания make-файлов, вы должны соблюдать порядок, по крайней мерев отношении того, какой элемент стоит первым.
В другом случае это может иметь значение (но это не должно иметь место в хорошо написанном make-файле): во многих случаях make
разрешит зависимости слева отправильный порядок;т.е. дано:
x.o : source/x.cpp header/x1.h header/x2.h
...
make
сначала проверит, что source/x.cpp
обновлено, и построит его при необходимости, а затем сделает то же самое для header/x1.h
и header/x2.h
, в этом порядке,Если у вас есть какие-либо необъявленные зависимости, которые требуют построения header/x1.h
до header/x2.h
, то изменение их порядка также вызовет проблемы.Это, однако, ошибка в make-файле;зависимость должна быть сделана явной (например, правило с header/x1.h : header/x2.h
).Потому что этот порядок не гарантируется иначе;например, в случае GNU make это может быть нарушено, если вы используете опцию -j
.header/x.h
, тогда замена заказа может вызвать проблемы.