包含头文件的Makefile

时间:2013-05-01 11:31:58

标签: c++ c makefile

app.c

#include "app.h"

app.h

#include "model/world.h"
#include "controller/controller.h"

如何在makefile中为app.o编写目标?我是否应该在先决条件中包含所有三个标题?

3 个答案:

答案 0 :(得分:0)

是的,你应该列出app.c的所有依赖项,这可能需要重新编译app.o.

您可能会发现g ++ -MM app.c很有用:-MM将以make格式列出app.c的所有依赖项。您甚至可以自动执行它并让makefile半自动处理依赖项。

答案 1 :(得分:0)

app.o : app.c app.h model/world.h controller/controller.h
    gcc -c app.c 

是的,您需要将所有三个标头都包含为依赖项。 Makefile:如果:右边的任何内容发生了变化,那么它需要重新制作左边的东西。如果您修复了控制器中的错误并从其中一个函数中删除了三个参数,并且应用程序从控制器调用该函数,则需要重新构建应用程序以处理更改。

否则,当应用程序走到控制器并询问带有5个参数的函数X时,新的和改进的控制器将无法知道应用程序正在讨论什么。将抛出错误。到处都是火与血。这一切都以泪水结束。

答案 2 :(得分:0)

不,你不应该把标题列为依赖项!对于已经以#include指令形式存在的规范,这是多余的。迟早冗余通常会导致问题,因为随着项目的增长,最终会出现不一致的列表。

还有一种普遍但天真的误解,即只有头文件是依赖项。这可能导致错误的构建,因为许多其他原因,如更改的命令行开关,更改的编译器或更改的硬件架构,都会受到监督。

这两个问题的解决方案是使用可靠的构建工具:makepp处理这些情况,甚至可以在启动它时扫描尚未构建的包含文件中的子包含。

makepp还有很多。除了做几乎所有GNU make之外,还有更多有用的东西,你甚至可以通过一些Perl编程扩展你的makefile。