1、Makefile是什么
在Linux系统中,Makefile是一个脚本文件,通常名为Makefile或者makefile,它使得程序员能够快速便捷地完成调用程序、编译代码、定位故障等工作。
Makefile是一个用于自动化构建和编译程序的脚本文件。它包含了程序的所有源文件、目标文件、编译器、链接器以及其他构建所需的指令和规则。官方标准文件为https://www.gnu.org/software/make/manual/make.html 。
Makefile通常包含了以下几个部分:
变量定义:Makefile中定义了一些变量,例如源文件、目标文件、编译器、链接器等。这些变量可以用来简化Makefile的编写和管理。
规则:Makefile中的规则指定了如何从源文件编译成目标文件的详细步骤,包括编译选项、链接选项等。这些规则通常使用条件语句、循环语句等高级语法来实现复杂的构建逻辑。
伪目标:伪目标是一个虚拟的目标文件,它并不实际存在于磁盘上,而是用来触发一系列指令执行的目标。Makefile中通常使用伪目标来管理构建的不同阶段,例如编译、链接、测试等。
自动变量:Makefile中使用的一些特殊变量,例如@、@、<、$@等,用于自动化构建过程中的一些操作。这些自动变量可以根据Makefile中的规则自动计算出相应的值,从而简化Makefile的编写和阅读。 在IC设计中,Makefile通常用于管理Verilog/VHDL/system verilog源代码文件,EDA工具的调用和运行。通过编写适当的Makefile规则,可以实现自动化构建、自动化测试等功能,提高IC设计的效率和可靠性。
为什么说Makefile使得程序员能够快速便捷地完成调用程序、编译代码、定位故障等工作呢?
以生活中的使用洗衣机脱水为例,需要进行如下步骤:
- 拿到衣服
- 打开洗衣机门
- 放入衣服
- 关闭洗衣机门
- 洗衣机跳转为脱水程序
- 点击开始键
在代码编译过程中,通常需要进行如下步骤:
1、找到代码文件
2、设置编译选项
3、设置输出文件名称和目录
4、开始运行编译工具
要完成如上的代码编译你需要输入很多指令,会觉得很费劲,还容易存在遗漏。使用Makefile可以将如上4个步骤指定为一个名为run的命令。在terminal中,只需要输入make run就可以完成代码编译的五个步骤了。
2、Makefile是如何识别命令的
我们以make vcs讲解。Makefile的执行离不开make,make 是linux系统自带的一个命令工具,用于解释 makefile 中的指令。
- 在terminal输入make vcs命令会使得make 会在当前目录下找名字叫“Makefile”或“makefile”的文件
- 如果在当前makefile中找到了执行对象vcs 则执行,如果没有找到则会在makefile include的文件中继续查找,直到所搜完所有的include文件。在找寻的过程中,如果出现错误,例如找不到执行的命令,那么make 就会直接退出,并报错