makefile выполняет цель даже без каких-либо изменений - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть простой 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

1 Ответ

0 голосов
/ 13 декабря 2018

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

.PHONY: all
all: program
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...