首页 > 解决方案 > 使用 GCC 和 GNU Make 自动生成依赖项有何用处?

问题描述

我在网上找到了很多方法来使用-MGCC(或 G++)的 -type 标志来自动在 Makefile 中生成依赖项。所有方法看起来都相似,我实现了这个

我能找到的所有支持的论点都是这样的:它可以帮助您,因为您不必手动管理依赖项。 我不明白为什么。

考虑以下文件:

主程序

#include "foo.h"
int main() { foo(); return 0; }

foo.h

void foo();

foo.c

#include "foo.h"
void foo() { ... }

我会说 main.c取决于foo。但是,当我运行时make main.o, foo 没有构建。依赖文件 main.d 包含(这解释了为什么 foo 没有被构建):

main.o: main.c foo.h

foo.h:

现在,如果我要创建一个可执行文件(例如app: ; $(CC) -o app main.c,带有或不带有自动依赖生成标志),我仍然必须手动指定它依赖于 foo.o。

所以我的问题是:如果我仍然必须指定对 foo.o 的依赖,那么自动依赖生成如何为我节省任何工作?

标签: gccmakefileg++gnu

解决方案


不,main.c不依赖于foo. 更准确地说main.c,它不依赖于任何东西,只依赖于文本编辑器。这main.o取决于main.c并且foo.h因为这些文件是编译所必需的main.o。您的最终二进制文件应该依赖main.ofoo.o链接在一起,但需要明确说明 -make链接器都不会找出您想要一起构建的文件。

这种自动依赖性给您的是这样的符号,即当更改时,即使它本身没有任何更改foo.hmain.o也需要重新编译(因为它包含在 中)。main.cmain.c


推荐阅读