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

时间:2017-08-23 22:01:34

标签: makefile

假设我有这个例子.h:

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

并且example.c:

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

我的Makefile应该是这样的吗? :

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

或者应该看起来像这样? :

intl

1 个答案:

答案 0 :(得分:1)

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)没有理由在#includeexample.h中出现相同的example.c语句,冗余的#include语句是kruft,应该删除。为安全起见,请将它们放入example.h;为了提高效率,请尽可能将它们放入example.c。 (我不会详细介绍何时可以在这里,但编译器会在你弄错的时候告诉你。)

3)如果您不想在makefile中维护该标题列表,gcc和Make可以为您处理它。这是一个例子,但这是an advanced technique,所以我建议你不要使用它,直到你理解它是如何工作的:

example.o : example.c
    gcc -MMD -c example.c -o example.o

-include *.d