现在的位置: 首页 > 综合 > 正文

如何产生依赖文件 Linux C programming

2018年04月28日 ⁄ 综合 ⁄ 共 2161字 ⁄ 字号 评论关闭
在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命令。

抱歉!评论已关闭.