按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
包含进来。
gcc …M main。c的输出是:
main。o: main。c defs。h /usr/include/stdio。h /usr/include/features。h
/usr/include/sys/cdefs。h /usr/include/gnu/stubs。h
/usr/lib/gcc…lib/i486…suse…linux/2。95。3/include/stddef。h
/usr/include/bits/types。h /usr/include/bits/pthreadtypes。h
/usr/include/bits/sched。h /usr/include/libio。h
/usr/include/_G_config。h /usr/include/wchar。h
/usr/include/bits/wchar。h /usr/include/gconv。h
/usr/lib/gcc…lib/i486…suse…linux/2。95。3/include/stdarg。h
/usr/include/bits/stdio_lim。h
gcc …MM main。c的输出则是:
main。o: main。c defs。h
那么,编译器的这个功能如何与我们的Makefile联系在一起呢。因为这样一来,我们的Makefile也要根据这些源文件重新生成,让 Makefile自已依赖于源文件?这个功能并不现实,不过我们可以有其它手段来迂回地实现这一功能。GNU组织建议把编译器为每一个源文件的自动生成的依赖关系放到一个文件中,为每一个“name。c”的文件都生成一个“name。d”的Makefile文件,'。d'文件中就存放对应'。c'文件的依赖关系。
于是,我们可以写出'。c'文件和'。d'文件的依赖关系,并让make自动更新或自成'。d'文件,并把其包含在我们的主Makefile中,这样,我们就可以自动化地生成每个文件的依赖关系了。
这里,我们给出了一个模式规则来产生'。d'文件:
%。d: %。c
@set …e; rm …f @;
(CC) …M (CPPFLAGS) 《 》 @。;
sed 's;(*)。o' :'*;1。o @ : ;g' 《 @。 》 @;
rm …f @。
这个规则的意思是,所有的'。d'文件依赖于'。c'文件,“rm …f @”的意思是删除所有的目标,也就是'。d'文件,第二行的意思是,为每个依赖文件“