是否用于编写makefile的递归构建

时间:2014-01-23 08:09:59

标签: makefile

My previsou question for sub-folder makefile

TOPDIR
|
├── a
│   ├── a.c
│   └── a.h
├── b
│   ├── b.c
│   └── b.h
├── c
│   ├── c.c
│   └── c.h
├── include
│   └── common.h
├── root
│    └──main.c
└── Makefile

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

  • 它无法识别我是否在重新编译期间修改了一些头文件

你可以根据TOP链接找到我之前的makefile,现在我想改变我的makefile风格,我希望实现以下目标:

  • makefile中只有一个TOPDIRmakefile可以先在项目树下获取所有源文件,然后进行编译。

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

有任何建议或示例吗?

1 个答案:

答案 0 :(得分:0)

我建议使用依赖关系生成工具,例如makedepend(http://en.wikipedia.org/wiki/Makedepend)或gcc(http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/Preprocessor-Options.html#Preprocessor-Options)的-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