Ничего не поделаешь для ошибки «все».
Это может быть нормально, если вы не меняли ни один из исходных файлов со времени последней сборки программы.Вероятно, вы должны показать точные команды, которые вы используете, и точный вывод команд.
Вы также должны добавить предварительные условия к некоторым из ваших правил.Как только программа собрана, отсутствие предварительных требований означает, что make не сможет определить, когда цель устарела.Например, редактирование main.c
не вызовет сборку.Может быть что-то вроде:
CC=gcc
PTHREAD=-lpthread
CCFLAGS=-w
all: main
main: main.c LibBMP.c skeleton.c extractor.c
$(CC) $(CCFLAGS) -o main main.c LibBMP.c skeleton.c extractor.c $(PTHREAD)
clean:
rm main
test: main
./main ../examples/sample.bmp
@echo
cat output.txt
@echo
cat final.txt
Это выглядит необычно.Нет переменной с именем CCFLAGS
.
main:
$(CC) $(CCFLAGS) ...
Обычно ваш рецепт выглядит примерно так:
CFLAGS = -g -w
CCFLAGS = -I. $(CFLAGS)
main:
$(CC) $(CPPFLAGS) $(CCFLAGS) ...
Использование CFLAGS
и CCFLAGS
делает две вещи.Во-первых, он предоставляет значение по умолчанию для CFLAGS
.Во-вторых, он позволяет пользователю переопределить CFLAGS
, предоставляя при этом необходимые параметры, хотя CCFLAGS
.
Также см. GNU Make |10.3 Переменные, используемые неявными правилами и Стандарты кодирования GNU |7.2.3 Переменные для указания команд .