在app.c
:
#include "app.h"
在app.h
:
#include "model/world.h"
#include "controller/controller.h"
如何app.o
在 makefile 中编写目标?我应该在先决条件中包含所有三个标题吗?
不,您不应该将标题列为依赖项!这与指令形式中已经存在的规范是多余的#include
。迟早冗余通常会导致问题,因为随着项目的增长,您最终会得到不一致的列表。
还有一个普遍但幼稚的误解,即只有头文件是依赖项。这可能会导致错误的构建,因为许多其他原因(例如更改命令行开关、更改编译器或更改硬件架构)都会受到监督。
这两个问题的解决方案是使用可靠的构建工具:makepp处理这些情况,甚至可以在您启动它时扫描包含文件中甚至尚未构建的子包含。
makepp 还有很多。除了做 GNU make 能做的几乎所有事情,还有很多有用的东西,你甚至可以用一些 Perl 编程来扩展你的 makefile。
是的,您应该列出可能需要重新编译 app.o 的 app.c 的所有依赖项。
您可能会发现 g++ -MM app.c 很有用:-MM 将以 make 格式列出 app.c 的所有依赖项。你甚至可以自动化它,让你的 makefile 半自动地处理依赖关系。
app.o : app.c app.h model/world.h controller/controller.h
gcc -c app.c
是的,您需要包含所有三个标头作为依赖项。Makefiles:如果右边的任何东西发生了:
变化,那么它需要重新制作左边的东西。如果您修复了控制器中的错误并从其中一个函数中删除了三个参数,并且应用程序从控制器中调用了该函数,则需要重新制作应用程序以处理更改。
否则,当应用程序走到控制器并请求带有 5 个参数的函数 X 时,新的和改进的控制器不会知道应用程序到底在说什么。将抛出错误。到处都是火和血。而这一切都以泪水告终。