makefile即使没有任何更改也可以执行目标

时间:2018-12-13 11:51:42

标签: makefile

我有一个简单的makefile可以正常工作,但似乎可以执行 all目标,即使未发生任何更改。我希望

make: Nothing to be done for 'all'.

消息,但是每当我调用make时,它都会继续执行目标。 这是我的简单makefile:

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 :(得分:2)

all替换不是文件且不存在的program(原因是make每次尝试构建它的原因),make可以看到的真实文件。如果您确实想要all的符号目标,请将其声明为phony并添加一条不带配方的规则以告知all取决于program

.PHONY: all
all: program