У меня есть простой makefile, который отлично работает, но, похоже, работает
цель all, даже если не произошло никаких изменений. Я ожидал
make: Nothing to be done for 'all'.
Сообщение, но он продолжает выполнять цель всякий раз, когда я вызываю make.
Вот мой простой make-файл:
BASEDIR = /home/someuser/STA
SRC_DIR = ${BASEDIR}/src
OBJ_DIR = ${BASEDIR}/obj
INC_DIR = ${BASEDIR}/inc
SRC_FILES = $(wildcard ${SRC_DIR}/*.cpp)
SRC_FILES_NOTDIR = $(notdir ${SRC_FILES})
OBJ_FILES_NOTDIR = $(patsubst %.cpp, %.cpp.o, ${SRC_FILES_NOTDIR})
OBJ_FILES = $(addprefix ${OBJ_DIR}/,${OBJ_FILES_NOTDIR})
INC_FILES = $(wildcard ${INC_DIR}/*.h)
all: ${OBJ_FILES}
g++ ${OBJ_FILES} -o program
${OBJ_DIR}/%.cpp.o: ${SRC_DIR}/%.cpp ${INC_FILES}
g++ -I${INC_DIR} -o $@ -c $<
И вот что выводится на терминал, когда я дважды вызываю make:
$ make
g++ <somedir/file1>.cpp.o <somedir/file2>.cpp.o -o program
$ make
g++ <somedir/file1>.cpp.o <somedir/file2>.cpp.o -o program





Замените all, который не является файлом и не существует (причина, по которой make пытается его собрать каждый раз) на program, реальный файл, который может видеть программа make. Если вам действительно нужна символическая цель all, объявите ее как фальшивый и добавьте правило без рецепта, чтобы сообщить программе make, что all зависит от program:
.PHONY: all
all: program