0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Makefile可以做什么?Makefile的基本格式

sanyue7758 来源: ExASIC 2024-01-25 11:18 次阅读

Makefile可以做什么?

Makefile可以根据指定的依赖规则和文件是否有修改来执行命令。常用来编译软件源代码,只需要重新编译修改过的文件,使得编译速度大大加快。

Makefile的基本格式

目标:依赖

命令

目标是要生成的结果,依赖是生成结果需要的源文件和上一步骤的结果,命令是当目标不存在或者依赖更新时执行的命令。注意命令前必须用tab来缩进,不可以用空格。

示例一:

simv: tb.sv dut.v

vcs -full64 -sverilog tb.sv dut.v

这个例子中,simv是目标,是我们要生成的仿真执行文件。tb.sv和dut.v是依赖,执行命令前会先检查tb.sv和dut.v是否存在,以及是否有修改。当依赖文件有修改时,或者目标不存在时,则执行命令vcs -full64 -sverilog tb.sv dut.v来生成simv。

伪目标

有时候目标并不是真实要生成的文件,比如我们要用Makefile调用simv来仿真,并不存在一个叫做sim的目标文件,这种情况我们称之为伪目标PHONY。

示例二:

sim: simv

./simv -xxx

这个例子中,sim并不是要生成的结果文件,而只是我们给操作起的一个名字。由于伪目标总是不存在,所以命令也一定会重新执行,即使simv没有修改。

我们常常在Makefile的开头来用.PHONY显式指明伪目标。

示例三:

.PHONY: sim

sim: simv

./simv -xxx

这样,我们在terminal里就可以用make sim来调用仿真命令。

默认目标

如果我们只是敲make(后面不跟目标),那么将调用Makefile里的第一个目标。那么我们为了防止出错通常把第一个目标定义成all(执行完整的流程)或者help(显示帮助菜单)。我更倾向于后者,可以帮助我们回忆如何使用Makefile脚本。

示例四:

.PHONY: help sim

help:

echo "make help"

echo "make simv to compile"

echo "make sim to run simulation"

simv: tb.sv dut.v

vcs -full64 -sverilog tb.sv dut.v

sim:

./simv -xxx

这样,当我们不记得如何使用Makefile的时候,直接敲make就会有使用帮助菜单。另外,我们还可以看到,一个目标后面可以执行多条命令,比如这里的三条echo命令。

隐藏回显

在执行命令前,make会先回显命令(就是打印出命令)。上面的make help会输出:

echo "make help"

make help

echo "make simv to compile"

make simv to compile

echo "make sim to run simulation"

make sim to run simulation

看起来有点重复了。在命令前加@可以关闭回显示,这正是我们需要的。改进过的Makefile如示例五。

示例五:

.PHONY: help

help:

@echo "make help"

@echo "make simv to compile"

@echo "make sim to run simulation"

makefile内定义变量

当源文件比较多,且常需要增减,我们可以把依赖定义成一个变量,放成文件开头,如下。

示例六:

tbfile := tb.sv env_pkg.sv test_pkg.sv

rtlfile := dut.v a.v b.v c.v

simv: $(tbfile) $(rtlfile)

vcs -full64 -sverilog $(tbfile) $(rtlfile)

当要增减文件时,只需要修改文件开头即可。

调用shell命令

如果rtl文件太多,还可以在Makefile里调用shell命令来帮助生成。如下面的例子:

示例七:

tbfile := $(shell ls *.sv)

rtlfile := $(shell find rtl -name "*.v")

simv: $(tbfile) ($rtlfile)

vcs -full64 -sverilog $(tbfile) $(rtlfile)

例七中的tb和rtl文件写两遍,是不是有点麻烦。我们最好能简化一下。在Makefile中有几个特殊变量,如$@表示目标,$^表示依赖。所以示例七中的命令可以简化成:

simv: $(tbfile) $(rtlfile)

vcs -full64 -sverilog $^

学到到这里你已经可以写出大部分的Makefile脚本了。

为makefile增加选项

但我们还需要进一步学习两个重要功能:选项和目录递归。

我们常需要在仿真时提供一些选项,比如testcase名,是否是post仿真,是否要dump波形。那么怎么实现呢?其实Makefile允许从命令行提供额外的变量,格式为OPTION=value。如下面的例子,假设有三个选项,TC、POST、DUMP:

示例八:

ifeq ($(POST),1)

SRC := "netlist.v"

else

SRC := "rtl.v"

endif

ifeq ($(DUMP),1)

DUMP_DEF := "+define+DUMP"

else

DUMP_DEF := ""

endif

sim:

@echo "vcs -full64 -sverilog $(SRC) $(DUMP_DEF) +UVM_TESTNAME=$(TC)"

那么,使用时就可以通过命令行控制选项开关:

make sim TC=basic_test

make sim TC=basic_test POST=1

make sim TC=basic_test DUMP=1

make sim TC=basic_test POST=1 DUMP=1

makefile的大杀器:目录递归

另一个重要功能是目录递归,目录递归有一个典型的应用:make clean。在顶层目录里make clean时,将会自动调用子目录的make clean。这个怎么实现呢?看下面的例子:

示例九:

./Makefile

clean:

rm -f *~

make -C a clean

make -C b clean

./a/Makefile

clean:

rm -f *~

./b/Makefile

clean:

rm -f *~

make -C c clean

./b/c/Makefile

clean:

rm -f *~

我们看到一个make -C subdir clean,就是说可以通过-C来把目标clean传递给子目录,相当于在Makefile里调用了另一个Makefile。这样在顶到make clean时,将自动递归到所有的子目录。

Makefile的引用与复用

最后还有一点,我们也会经常遇到,把共用的Makefile脚本写到common.mk,然后再include common.mk,这样可以让Makefile看起来更简洁。

IC Flow的联系

到这里,学了这么多,你已经可以写一些复杂的Makefile了。但重在应用,在IC设计里,我们常常用Makefile串起多个工具,实现完整的流程。下面是一个启发型的例子。

示例十:

.PHONY: help clean rtl lint sim syn lec pr pt lvs

help:

@echo "make help"

clean:

rm -rf *~ *.log *.fsdb csrc simv* ...

make -C xxx clean

rtl:

python3 ...

lint:

sg_shell/nLint ...

sim:

vcs/irun ...

syn:

dc_shell -64bit -topographical -f run_syn.tcl | tee log/syn.log

lec:

fm_shell/lec ...

pt:

pt_shell ...

pr:

innovus/icc ...

lvs:

calibre ...

习题:

根据自己公司的情况,把示例十补充完整。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 命令
    +关注

    关注

    5

    文章

    638

    浏览量

    21849
  • 编译
    +关注

    关注

    0

    文章

    615

    浏览量

    32392
  • Makefile
    +关注

    关注

    1

    文章

    121

    浏览量

    19094

原文标题:【手把手系列】:芯片设计中的Makefile简明教程

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Makefile中文教程 -下载

    Makefile中文教程,免费下载哦。
    发表于 03-25 08:57 66次下载

    教你写Makefile

    教你写Makefile 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,
    发表于 02-10 14:24 37次下载

    C语言入门教程-makefile

    makefile 重复键入上一节的gcc命令很是麻烦,尤其是当您要不断修改的代码,且使用了好几个函数库的时候。make工具解决了这个问题。您可以用下面的makefile代替前面的一串编
    发表于 07-29 11:20 816次阅读

    跟我一起学Makefile

    不坑爹欢迎下载,快快快makefile经典
    发表于 01-05 16:06 1次下载

    驾驭Makefile

    驾驭Makefile在网上你能找到很多关于Makefile的学习资料,但绝大部分给你的只是一个知识点,与将Makefile运用到项目中(尤其是大型项目)的差距非常的大。因为,将Makefile
    发表于 01-05 17:05 9次下载

    Makefile教程

    Linux开发必备的Makefile文件编译教本,讲解的很到位,新手基本上看上几天就可以上手了
    发表于 01-05 17:05 0次下载

    跟我一起学makefile

    关于makefile学习,深入了解嵌入式下makefile的编写
    发表于 05-23 18:21 0次下载

    驾驭makefile

    一本Makefile的经典教程,深入浅出,易学易懂
    发表于 06-17 16:16 9次下载

    跟我一起写makefile

    想了解Makefile可以看看
    发表于 03-04 18:39 0次下载

    Linux内核Makefile文件

    Makefile文件的详细编写过程
    发表于 08-28 09:25 14次下载

    linux makefile教程

     什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile
    发表于 11-12 09:11 4945次阅读

    Makefile是什么?Makefile工作原理是怎样的?Makefile经典教程免费下载

    Makefile的重要性 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件
    发表于 09-12 17:19 0次下载
    <b class='flag-5'>Makefile</b>是什么?<b class='flag-5'>Makefile</b>工作原理是怎样的?<b class='flag-5'>Makefile</b>经典教程免费下载

    嵌入式中的Makefile应用

    文章目录一.Makefile 引入二. Makefile语法1.通配符2.假象目标3.变量三.Makefile函数四.实例本文主要总结一下嵌入式开发中的Makefile,一般项目中都需
    发表于 11-03 17:06 11次下载
    嵌入式中的<b class='flag-5'>Makefile</b>应用

    MakefileMakefile与shell命令的联系

    博主最近在项目实践过程中,需要深度定制项目的Makefile,其中有些复杂的流程必须得借助shell脚本才能高效地完成,为此博主特意深入学习了在Makefile种调用shell命令的方法。
    的头像 发表于 07-11 09:06 2552次阅读
    【<b class='flag-5'>Makefile</b>】<b class='flag-5'>Makefile</b>与shell命令的联系

    Makefile】简单实用的Makefile模板来了

    【Linux + Makefile】简单实用的Makefile模板来了
    的头像 发表于 08-31 12:46 1643次阅读
    【<b class='flag-5'>Makefile</b>】简单实用的<b class='flag-5'>Makefile</b>模板来了