0

app.c

#include "app.h"

app.h

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

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

4

3 回答 3

0

不,您不应该将标题列为依赖项!这与指令形式中已经存在的规范是多余的#include。迟早冗余通常会导致问题,因为随着项目的增长,您最终会得到不一致的列表。

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

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

makepp 还有很多。除了做 GNU make 能做的几乎所有事情,还有很多有用的东西,你甚至可以用一些 Perl 编程来扩展你的 makefile。

于 2013-05-01T15:34:07.133 回答
0

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

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

于 2013-05-01T11:42:44.803 回答
0
app.o : app.c app.h model/world.h controller/controller.h
    gcc -c app.c 

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

否则,当应用程序走到控制器并请求带有 5 个参数的函数 X 时,新的和改进的控制器不会知道应用程序到底在说什么。将抛出错误。到处都是火和血。而这一切都以泪水告终。

于 2013-05-01T14:02:53.057 回答