Grapeoff
@Grapeoff
В чём концепция...?

Почему вылезает сообщение «make: «build» не требует обновления»?

У меня есть такой Makefile

PROJECT=GameOfLife

CXX=clang++-13
STD=c++2a
STDLIB=libstdc++
FLAGS=-Wall -Wextra

LINKARGS=-lsfml-graphics -lsfml-window -lsfml-system

SOURCES=src/main.cpp
OBJECTS=$(wildcard build/*.o)

build: $(SOURCES)
	$(CXX) -c -std=$(STD) -stdlib=$(STDLIB) $(FLAGS) $(SOURCES)
	mv *.o ./build

link: $(OBJECTS)
	$(CXX) $(OBJECTS) -o bin/$(PROJECT) $(LINKARGS)

clean:
	rm -rf bin/*
	rm -rf build/*

compile: 
	make build
	make link

run:
	make compile
	./bin/$(PROJECT)

.PHONY: clean compile run

Если я запускаю make build первый раз, то всё работает. Если запускаю второй раз, то вылезает такое сообщение:

➜  make build 
make: «build» не требует обновления.

До этого я выполнил команду make clean. В итоге этот такс срабатывает только если его постоянно переименовывать.

Структура проекта:

GOL
 ┣ bin
 ┣ build
 ┣ include
 ┣ lib
 ┣ src
 ┃ ┗ main.cpp
 ┗ Makefile
  • Вопрос задан
  • 646 просмотров
Решения вопроса 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Почему вылезает сообщение «make: «build» не требует обновления»?

ну и для ответа на оригинальный вопрос: потому что правило
build: $(SOURCES)

говорит, что каталог build зависит только от исходных файлов. Команды mv *.o ./build и rm -rf build/* делают его новее исходников, поэтому make считает, что обновлять его не надо.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Ответ в комментариях
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы