在app.c
:
#include "app.h"
在app.h
:
#include "model/world.h"
#include "controller/controller.h"
如何在makefile中为app.o
编写目标?我是否应该在先决条件中包含所有三个标题?
答案 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。