如何通过自动生成的makefile 看各个文件的依赖关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过自动生成的makefile 看各个文件的依赖关系相关的知识,希望对你有一定的参考价值。

参考技术A 这位朋友我看是有点误解了makefile的做用。makefile 是一个脚本,由他来控制编译出的程序的版本。当你改写了原文件后,通过makefile 来检查依赖关系,来生成最终的文件。比如一个程序叫a 他的源码叫a.c a.c 又用到头文件a.h ,a.h是1.h和2.h生成的 如果你改写了1.h,通过编写makefile文件。make时会调用makefile来依此按依赖关系生成最后的a 所以说编译时程序并不知道生成a都用到什么。怎么可能自己生成呢。 makefile是要你自己编写的,来告诉make来如何编译。make工具就相当于一个脚本。 参考技术B 目标,依赖,命令(规则),第一项目标,然后会有个:号,后面的就是依赖了 例如 hello.o : hello.c, a.o, b.o gcc hello.c hello.o hello.c, a.o,b.o就都是依赖,就这样本回答被提问者采纳

Makefile使用

在Shell脚本中使用make命令来进行编译,尤其在C开发中,make命令通过makefile文件中描述源程序之间的依赖关系进行自动编译;makefile文件是按照规定格式编写,需说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系;很多大型项目的编译都是通过 Makefile 来组织的。

首先查看是否安装了 make

make -v

 出现:

GNU Make 4.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

 

代表安装成功了。

清理一下.o文件:

rm *.o

 

然后打开Makefile 注意首字母要大写

vi Makefile

然后写入依赖关系

#this is make fike 代表注释内容
a.out:2.o 3.o 1.c #可执行文件:由哪些文件依赖
        gcc 2.o 3.o 1.c -o main.out #执行gcc命令 一定要用编译器里的Tab否择会出错
2.o:2.c #目标代码文件:由.c文件生成
        gcc -c 2.c
3.:3.c
        gcc -c 3.c

 

保存退出,执行make

dacui@ubuntu:~/Desktop/study$ make
gcc -c 2.c
cc    -c -o 3.o 3.c
gcc 2.o 3.o 1.c -o main.out

 

ls查看下文件

1.c  2.c  2.h  2.o  3.c  3.h  3.o  a.out  main.out  Makefile

 

执行a.out /main.out

dacui@ubuntu:~/Desktop/study$ ./main.out
num=:10 min=1
dacui@ubuntu:~/Desktop/study$ ./a.out
num=:10 min=1

结果是一样的

 

以上是关于如何通过自动生成的makefile 看各个文件的依赖关系的主要内容,如果未能解决你的问题,请参考以下文章

初识 makefile 的结构

Shell脚本——make命令和Makefile文件

内核makefile里面的如何定义宏

一个灵活通用的GNU makefile

如何用makefile编译多个c文件

Makefile 是如何工作的?其中的宏定义分别是啥意思?