如何产生依赖文件 Linux C programming

在linux 编程中, makedepend 是一个很重要的工具,它可以根据#include #ifdef #if 等宏定义获取文件所要依赖的头文件并且保存到相应的文件,从而作为源文件的预处理来提高文件编译速度。实际中,有两种方法获取这种依赖关系,一种是直接 使用makedepend工具,另外一种是通过gcc -C 获取。 我们分别简单介绍二者的使用。 这是一个简单的源文件,使用来测试va_list的。 /* main.c */ #include <stdio.h> #include <stddef.h> #include <stdarg.h> int func(char *fmt,...) { char * args; va_list arg; args = (char *)arg; va_start(arg,fmt); printf("%s sizeof(va_list) = %lu %d/n",fmt,sizeof(va_list),'//'); va_end(arg); return 0; } int main(int argc,char *argvs[]) { int b = 1; int c = 0xFFF21334; unsigned int d = c; func("a = %d,b = %d/n",b); printf("%d %d %d/n",c,d,~(d - 1)); return 0; } 1. 使用“gcc -C” 我们看一下makefile 文件 #makefile SOURCES:=$(wildcard *.c) TARGETS:=$(basename $(SOURCES)) CFLAGS += -Wall -DHACK -I/usr/lib/gcc/x86_64-linux-gnu/4.2/include/ CC:=/usr/bin/gcc all: $(TARGETS) depend: $(SOURCES) @for file in $(SOURCES); do / $(CC) $(CFLAGS) -M $$file; / done > dep.mk clean: rm -rf $(TARGETS) *.o dep.mk -include dep.mk 在命令行中输入make depend,那么一个包含依赖关系的dep.mk文件生成了。内容如下: main.o: main.c /usr/include/stdio.h /usr/include/features.h / /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h / /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h / /usr/lib/gcc/x86_64-linux-gnu/4.2.3/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/gcc/x86_64-linux-gnu/4.2.3/include/stdarg.h / /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h 2 直接在命令行中执行 “makedepend -I/usr/lib/gcc/x86_64-linux-gnu/4.2/include/ main.c”就可以了。然后你可以查看Makefile文件,在文件末尾添加了一些依赖行信息 # DO NOT DELETE main.o: /usr/include/stdio.h /usr/include/features.h /usr/include/sys/cdefs.h main.o: /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h main.o: /usr/include/gnu/stubs-64.h main.o: /usr/lib/gcc/x86_64-linux-gnu/4.2/include/stddef.h main.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h main.o: /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h main.o: /usr/lib/gcc/x86_64-linux-gnu/4.2/include/stdarg.h main.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h 不过虽然二者的目的一样,但是建议使用地一种方法:1) 它包含相应的非头文件依赖信息,2)依赖信息独立于makefile文件 3)无须额外的makedepend命令。

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...