Нужно ли обязательно определять целевой $ (EXE) после целевого .co?
Во-первых, .c.o
не является целью, это правило суффикса .
Во-вторых, make
не имеет значения, в каких целях последовательности написаны, поэтому ответ - «нет».Весь make-файл читается, и когда цель отсутствует, выполняется поиск правила для создания цели.Технически, make
создает направленный ациклический граф (DAG) целей и зависимостей, прежде чем он решит построить что-либо.Ссылки на переменные заменяются, когда они используются, а не когда они читаются (исключение: оператор присваивания :=
GNU make).
Попробуйте поиграть с порядком целей.Вы даже можете переместить назначения переменных вниз.
Я уверен, что в GNU есть несколько эзотерических углов, где все работает немного по-другому, но в простом makefile, как у вас, не отклоняясь слишком далеко отMakefile для POSIX, вот как это работает.