0


Linux: make/Makefile 相关的知识

背景:

  • 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
  • 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的 规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂 的功能操作
  • makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编 译,极大的提高了软件开发的效率。
  • make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命 令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一 种在工程方面的编译方法。
  • make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

使用方法:

创建makefile文件,使用vim 在makefile文件中进行编辑

***makefile内部输入的内容 ***

***输入内容的解析 ***

工作原理:

  1. *make会在当前目录下找名字叫“Makefile”或“makefile”的文件。 *
  2. 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到mytest这个文件, 并把这个文件作为最终的目标文件,进行执行。
  3. 同时在执行的过程中,make会检测这个目标文件是否有必要进行执行,就比如:执行的目标文件是clean,文件的依赖方法是清除某一个指定的文件,当这个文件清除后,再次使用make进行执行时,make会发出提示,因为他找不到要删除的文件了。
  4. 同理对于其他文件来说,make会查看该文件的可执行文件和源文件的更新时间,如果源文件的时间更新则进行make,而可执行文件的时间更新则不执行make
  5. 而多不想要make的提示则需要 输入 .PHONY:目标文件 即可进行重复的执行目标文件下的依赖方法
  6. 因为make 是默认执行makefile中的第一个目标文件,若想要执行其他的目标文件则需要 make 目标文件名 即可。

***依赖方法的执行 ***

内置符号

@表示目标文件,^表示依赖文件列表,$表示取出的意思,就如下图所示$@ 表示 code.exe,$^ 表示code.c

注释符号

在makefile中注释符号是#

特殊的工作原理

*** 汇编过程是倒着写的,但是最后使用make却是从上扫描到下的,可是结果显示出来确实正确的汇编过程这是为什么?而且一个make就显示了全部的汇编过程***

  • 原因:

make虽然是从上扫描到下的,但是make找到目标文件后,发现里面的依赖文件不存在就不会指向它的依赖方法,然后就会往下查找下面的目标文件,直到找到存在的依赖文件,然后实现,又因为在该makeflie中 有了.i就有了.s有了等等就和递归值返回一样,其他的依赖关系依次实现,使得上面的依赖关系都展开了

***换种说法就是,如果make寻找的目标文件中的依赖文件不存在,就会入栈,直到有了这个依赖文件就会出栈 ***

同样如果是乱序,make也有可能会进行入栈和递归这类操作 ,不过,你必须要把最重要的最后一步的文件放在开头

makefile支持变量定义

左侧是变量名,右侧是变量的内容,也就说变量的值,同时可以用变量名代替替换的内容

隐藏变量方法:

可以在依赖方法前加上@就可以在使用make时不显示依赖方法

多行依赖方法的支持


标签: linux 运维 服务器

本文转载自: https://blog.csdn.net/2301_76445610/article/details/135824022
版权归原作者 明 日 香 所有, 如有侵权,请联系我们删除。

“Linux: make/Makefile 相关的知识”的评论:

还没有评论