【发布时间】:2011-11-13 06:48:00
【问题描述】:
已编辑
我正在尝试重新编译源文件,而不必为 makefile 中的每个 CPP 指定头文件。
我很失望:
#CoreObj1.cpp(and .h)
#CoreObj2.cpp(and .h)
#This is the makefile.
CORE_COMPONENT_OBJECTS = \
obj/CoreObj1.o \
obj/CoreObj2.o \
# Objects
obj/%.o: %.cpp obj/%.d
@mkdir -p obj
$(CXX) $(CXX_CFLAGS) -c $*.cpp -o $@
# Dependencies
obj/%.d: %.cpp
@mkdir -p obj
$(CXX) $(CXX_CFLAGS) -MM -MF $@ $<
DEPS = $(CORE_COMPONENT_OBJECTS:.o=.d)
ifneq ($(MAKECMDGOALS),clean)
-include $(DEPS)
endif
但是修改一个头文件并不会触发包含它的源文件被重新编译。
注意:事实上,如果我的 .o、.d 和 .cpp 在同一个文件夹中,它就可以工作。但如果我的 .d 和 .o 在 obj/ 文件夹中,则不会触发重新编译。
【问题讨论】:
-
我通过使用适当的构建系统(如 automake 或 cmake)来处理此类依赖项;)根据我的经验,
Makefile很快变得无法维护。 -
@honk 这取决于项目(大小/复杂性); makefile 变得不可维护,因为程序员很少保持它们的组织和清理,将其作为低优先级任务,而且通常不了解 make 的大部分功能
-
在您的第四次编辑之后,您的问题缺少问题、问题、错误报告等任何内容......
-
@eriktous:我已经简化了问题,因为我认为我的问题出在多个 makefile 上,但它不适用于单个 makefile。如果您重新阅读(当前)问题,我认为这是有道理的。我也编辑了标题。