【发布时间】:2014-08-14 13:02:13
【问题描述】:
我有一个这样的makefile:
program: \
a/a.o \
b/b.o
$(CXX) $(CXXFLAGS) -o program \
a/a.o \
b/b.o
a.o: \
a/a.cpp \
a/a.h
$(CXX) $(CXXFLAGS) -c a/a.cpp
b.o: \
b/b.cpp \
b/b.h
$(CXX) $(CXXFLAGS) -c b/b.cpp
所以在makefile的目录中我有两个子目录a和b 分别包含 a.h、a.cpp 和 b.h、b.cpp。 问题是,如果我修改 .cpp 文件,发出 make 会重建目标程序 但是如果我修改一个 .h 文件,make 不会重建任何东西,只是说
make: `program' is up to date.
我不明白为什么,因为 .h 文件在先决条件行中 以及 .cpp 文件。 有趣的是,如果我对像
这样的目标文件目标发出 make$ make a.o
相反,对 a/a.h 的修改 检测到目标 a/a.o 并重建。 问题出在哪里?
【问题讨论】:
-
我无法重现您的问题;您提供的示例对我来说很好。因此,您的实际情况必须与此示例在某些实质性方面有所不同。在我们提供帮助之前,您需要让您的示例失败,就像您的实际情况失败一样。
-
好的,为了简洁起见,我删减了真正的 makefile。事实上,在您发表评论后,我已经尝试过,发现这个简短的示例也适用于我。因此,我寻找与真正的 makefile 的一些实质性差异,我看到的唯一一个是文件实际上包含在子目录中。从这个意义上说,我已经编辑了要更新的问题。
标签: header makefile rule rebuild