До сих пор не могу четко уяснить, каким образом утилиты *никсовые make/gmake и виндовая nmake обрабатывают makefile. Во всех описаниях налегают на интуитивное понимание процесса и то, что должно получиться в итоге, а мне интересны именно нюансы, но не настолько, чтобы зарываться ради этого в исходники (которых для nmake еще и не найти).
Пока складывается впечатление, что сперва полностью разбирается весь makefile, с выполнением только директив и присваиваний переменным, в результате чего генерируется итоговый текст (исходный вместе с макрорасширениями) по типу сишного препроцессора. И только после завершения этого процесса, то, что получилось, интерпретируется на предмет набора правил, с выполнением соответствующих команд. То есть, на этапе выполнения команд уже невозможно поменять значения переменных, чтобы использовать их в командах, выполняемых позже.
Это действительно так, или есть какие-то особенности? Есть ли где-нибудь явное описание процесса как для make/gmake, так и для nmake?