2

我在 include/c++ 文件夹中有一个 *.H c++ 头文件,但是即使我修改了这些文件,make 也不会再次制作,当这些文件被修改时,我可以修改我的 Makefile 以重新制作什么?

4

2 回答 2

7

如果您使用 GNU make 和 GCC,并为每个源构建单独的对象(而不是直接从所有源构建程序),您可以自动生成必要的依赖项。在编译器的命令行参数中添加以下内容:

-MD -MP

-MD将在每个对象旁边生成一个.d文件,其中包含指定它所依赖的所有标头的 make 规则。如果您不希望它们发生变化,您可以改为使用-MMD来排除系统标头(包含在<>而不是中的标头)。将生成虚拟规则以确保在删除任何标题时重建目标。""-MP

然后包含.dmakefile 中的所有文件,-include如果它们丢失,则不会出错。我通过转换目标文件列表来做到这一点:

-include $(all_objs:.o=.d)
于 2013-11-01T12:32:06.813 回答
2

只要确保您的目标取决于您的标题。

your_app: $(SOURCES) $(HEADERS)
  $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(SOURCES) $(LIBS) -o$@
于 2013-11-01T12:24:18.757 回答