制作隐式规则和头文件

时间:2012-05-09 17:09:47

标签: c makefile header-files

Make的隐含规则据说可以让Makefile更容易编写,但是,如果我的理解是正确的,如果我的C文件依赖于任何头文件,我需要明确地编写规则。我对吗?这似乎会严重降低隐式规则的实用性,因为大多数C文件依赖于几个头文件,所以我想也许有些东西我不知道。

3 个答案:

答案 0 :(得分:7)

您可以使用以下makefile片段

使用gcc自动生成标头依赖项
SOURCES := $(wildcard *.c)
DEPS := $(SOURCES:%.c=%.d)
CFLAGS += -MMD

-include $(DEPS)

代码可能需要进行一些调整才能使用您的特定规则集。

答案 1 :(得分:5)

您不需要编写规则,只需编写依赖项。例如:

foo.o : foo.h bar.h

文件foo.o仍将由隐式规则生成,但具有其他依赖项foo.hbar.h。大多数编译器也可以自动生成此依赖项。

答案 2 :(得分:2)

make一个实用程序,可以在C文件中读取并读取它所包含的标头。它基于更改的文件时间戳工作。因此,无论目标是依赖于标头还是任何其他文件,您都需要明确告知make依赖项。

gcc可以通过为您生成依赖列表来帮助您轻松完成工作

<强>的main.c

#include<stdio.h>
#include"my_header.h"

int main ()
{
return 0;
}

然后,

gcc -M main.c

现在,使用-M预处理程序标志,它将自动生成依赖列表,如

main.o: main.c /usr/include/stdio.h /usr/include/features.h \
 /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \
 /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \
 /usr/include/gnu/stubs-64.h \
 /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \
 /usr/include/bits/types.h /usr/include/bits/typesizes.h \
 /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
 /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \
 /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
 my_header.h

gcc已经在stdio.h内找到了所有内容!