Make 的隐含规则据说可以使编写 Makefile 更容易,但是,如果我的理解是正确的,如果我的 C 文件依赖于任何头文件,我需要明确地编写规则。我对吗?这似乎严重降低了隐式规则的有用性,因为大多数 C 文件都依赖于几个头文件,所以我想也许我缺少一些东西。
问问题
2956 次
3 回答
8
您可以使用以下 makefile 片段使用 gcc 自动生成头文件依赖项
SOURCES := $(wildcard *.c)
DEPS := $(SOURCES:%.c=%.d)
CFLAGS += -MMD
-include $(DEPS)
代码可能需要一些调整才能与您的特定规则集一起使用。
于 2012-05-09T18:00:55.783 回答
6
您不需要编写规则,只需要编写依赖项。例子:
foo.o : foo.h bar.h
文件 foo.o 仍将由隐式规则生成,但具有额外的依赖项foo.h
和bar.h
. 大多数编译器也可以自动生成此依赖行。
于 2012-05-09T17:22:14.450 回答
2
make
不是一个实用程序,它会在您的 C 文件中读取并确定它包含哪个标头。它基于文件更改的时间戳工作。因此,无论目标是依赖于头文件还是任何其他文件,您都需要明确告知make
依赖关系。
gcc
可以通过像这样为您生成依赖项列表来帮助您减轻工作
主程序
#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
!
于 2012-05-09T17:18:37.150 回答