我有一个简单的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
答案 0 :(得分:2)
用all
替换不是文件且不存在的program
(原因是make每次尝试构建它的原因),make可以看到的真实文件。如果您确实想要all
的符号目标,请将其声明为phony并添加一条不带配方的规则以告知all
取决于program
:
.PHONY: all
all: program