我在include / c ++文件夹中有一个* .H c ++标题,但是即使我修改了这些文件,make make还没有重新制作,当修改这些文件时,我可以修改我的Makefile以重新制作吗?
答案 0 :(得分:6)
如果您正在使用GNU make和GCC,并为每个源构建单独的对象(而不是直接从所有源构建程序),您可以自动生成必要的依赖项。添加以下编译器的命令行参数:
-MD -MP
-MD
将在每个对象旁边生成一个.d
文件,其中包含指定所依赖的所有标头的make规则。如果您不希望这些标题发生变化,您可以使用-MMD
排除系统标题(<>
包含的标题而不是""
)。 -MP
将生成虚拟规则,以确保在删除任何标头时重建目标。
然后使用.d
包含makefile中的所有-include
个文件,这样如果它们丢失则不是错误。我这样做是通过转换目标文件列表来实现的:
-include $(all_objs:.o=.d)
答案 1 :(得分:2)
确保您的目标取决于您的标题。
your_app: $(SOURCES) $(HEADERS)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(SOURCES) $(LIBS) -o$@