微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何产生依赖文件 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命令。

原文地址:https://www.jb51.cc/javaschema/288007.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐