1、依赖关系.d

  • main.c依赖stdio.h、add.h等头文件
  • 在 Makefile 中, 我们的依赖关系可能需要包含一系列的头文件 ```

    include

    include “add.h”

int main(){ int result = addTwo(3,2); printf(“%d\n”,result); return 0; } ```

  • 但如果是一个比较大型的工程,你必需清楚每一个 C 源文件包含了哪些头文件,并且在加入或删除头文件时,也需要小心地修改 Makefile,这是一个很没有维护性的工作。为了避免这种繁重而又容易出错的事情,我们可以使用 C/C++ 编译的一个功能。大多数的 C/C++ 编译器都支持一个 “-M” 的选项,即自动找寻源文件中包含的头文件,并生成一个依赖关系。例如,执行下面的命令

    -MM

  • 查看某个文件的依赖关系

    • gcc -MM xx:生成文件的依赖关系,不包含标准库的头文件
    • gcc -M xx:生成文件的依赖关系,包含标准库的头文件

      xin@ubuntu:/mnt/hgfs/make_demo$ gcc -MM main.c main.o: main.c add.h xin@ubuntu:/mnt/hgfs/make_demo$ gcc -M main.c main.o: main.c /usr/include/stdc-predef.h /usr/include/stdio.h \ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \ /usr/include/x86_64-linux-gnu/bits/wordsize.h \ /usr/include/x86_64-linux-gnu/gnu/stubs.h \ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \

/usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h \

/usr/include/x86_64-linux-gnu/bits/types.h \

/usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \

/usr/include/_G_config.h /usr/include/wchar.h \

/usr/lib/gcc/x86_64-linux-gnu/4.8/include/stdarg.h \

/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \

/usr/include/x86_64-linux-gnu/bits/sys_errlist.h add.h

-MF

  • 依赖关系写入到文件.d

    xin@ubuntu:/mnt/hgfs/make_demo$ gcc -MM -MF main.d main.c

xin@ubuntu:/mnt/hgfs/make_demo$ cat main.d

main.o: main.c add.h

xin@ubuntu:/mnt/hgfs/make_demo$

  • 另一种写法,>表示把命令输出结果写入到文件main.d中

    xin@ubuntu:/mnt/hgfs/make_demo$ gcc -MM main.c > main.d

xin@ubuntu:/mnt/hgfs/make_demo$ cat main.d

main.o: main.c add.h

例子