用于编写makefile的递归构建或非递归构建

用于编写makefile的递归构建或非递归构建,makefile,Makefile,上面是我的项目文件树视图,我写了一些makefile,但似乎有以下问题: 它无法识别我是否在重新编译期间修改了某些头文件 您可以根据顶部链接找到我以前的makefile,现在我想更改我的makefile样式,我想实现以下几点: 在TOPDIR中只有一个makefile,这个makefile可以首先获取我的项目树下的所有源文件,然后编译它们 我需要生成一个良好的依赖项,这样,它可以帮助识别我是否在重新编译期间更新了一些头文件 有什么建议或例子吗 我建议使用依赖项生成工具,例如makedep

上面是我的项目文件树视图,我写了一些
makefile
,但似乎有以下问题:

  • 它无法识别我是否在重新编译期间修改了某些头文件
您可以根据顶部链接找到我以前的
makefile
,现在我想更改我的
makefile
样式,我想实现以下几点:

  • TOPDIR
    中只有一个
    makefile
    ,这个
    makefile
    可以首先获取我的项目树下的所有源文件,然后编译它们

  • 我需要生成一个良好的依赖项,这样,它可以帮助识别我是否在重新编译期间更新了一些头文件


有什么建议或例子吗

我建议使用依赖项生成工具,例如makedepend()或gcc()的-M选项之一,如果您使用该工具生成依赖项文件,然后从makefile中包含该文件。理想情况下,每个输出文件都有一个依赖项文件,并且让依赖项文件列出输出文件和其自身的依赖项(即,每行对对象文件重复一次,对依赖项文件重复一次)。这样,您的依赖项文件将在必要时自动重新生成。大概是这样的:

SOURCES=#...
DEPS=$(addprefix .dep/,$(addsuffix .mk,$(SOURCES))
-include $(DEPS)
.dep:
  mkdir .dep
.dep/%.mk: | .dep
  # Rule for generating the .dep/foo.c.mk, which holds both dependencies for
  # foo.c and .dep/foo.c.mk
SOURCES=#...
DEPS=$(addprefix .dep/,$(addsuffix .mk,$(SOURCES))
-include $(DEPS)
.dep:
  mkdir .dep
.dep/%.mk: | .dep
  # Rule for generating the .dep/foo.c.mk, which holds both dependencies for
  # foo.c and .dep/foo.c.mk