Make的隐含规则据说可以让Makefile更容易编写,但是,如果我的理解是正确的,如果我的C文件依赖于任何头文件,我需要明确地编写规则。我对吗?这似乎会严重降低隐式规则的实用性,因为大多数C文件依赖于几个头文件,所以我想也许有些东西我不知道。
答案 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.h
和bar.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
内找到了所有内容!