Если вы не выберете конкретную цель для сборки в командной строке (через make <target>
), make всегда будет выбирать первую цель, которую видит в make-файле, в качестве цели по умолчанию для сборки
Рассмотрим эти строки в вашем make-файле:
-include $(OBJECT_FILE:%.o=%.d)
TARGET := app
all: $(TARGET)
Когда ничего не построено, .d
файлов нет, поэтому -include
ничего не включает. Затем make находит цель all
и использует ее по умолчанию.
Во второй раз через make-файл находятся .d
файлы, поэтому команда -include
включает их. Эти файлы определяют некоторые цели, первая из которых main.o
, и теперь это первая цель, созданная по умолчанию.
Вы должны переместить -include
вниз до end файла makefile и убедиться, что цель all
всегда является первой созданной.
Так же, как в стороне, я не знаю, является ли это артефактом вашего вырезания и вставки в SO, но многие из ваших строк имеют дополнительный пробел в конце. Вы должны знать, что во многих местах дополнительные пробелы в конце строк ЗНАЧИТЕЛЬНО в make-файлах. Я настоятельно рекомендую использовать редактор, который позволит вам визуализировать пробелы и / или автоматически удалять лишние пробелы в конце строк.