make - 我需要声明哪些文件作为具有多个 #include 语句的目标的先决条件?



假设我有这个例子.h:

// example.h
#include "a.h"
#include "b.h"
#include "c.h"
#include "d.h"
#include "e.h"

和例子.c:

// example.c
#include "example.h"
#include "a.h"
#include "b.h"
#include "c.h"
#include "d.h"
#include "e.h"

我的 Makefile 应该看起来像这样吗?

example.o : example.h example.c
gcc -c example.c -o example.o

还是应该看起来像这样?

example.o : example.h example.c a.h b.h c.h d.h e.h
gcc -c example.c -o example.o

1(它应该看起来像你的第二个版本:

example.o : example.h example.c a.h b.h c.h d.h e.h
gcc -c example.c -o example.o

2(没有理由在example.hexample.c中同时出现相同的#include语句,多余的#include语句是粗鲁的,应该被删除。为了安全起见,请将它们放在example.h;为了提高效率,请尽可能将它们放在example.c。(我不会在这里详细介绍你什么时候可以,但编译器会在你弄错的时候告诉你。

3(如果您不想在makefile中维护该标头列表,gcc和Make可以为您处理。这里有一个例子,但这是一种高级技术,所以我建议你在了解它是如何工作的之前不要使用它:

example.o : example.c
gcc -MMD -c example.c -o example.o
-include *.d

最新更新