Makefile的基本格式
- 目标:依赖
命令
目标是要生成的结果,依赖是生成结果需要的源文件,命令是当目标不存在或依赖更新时执行的命令。
示例一
simv:tb.sv dut.v
vcs -full64 -sverilog +v2k -debug_all +notimingcheck +nospecity tb.sv dut.v
- 伪目标
示例二
.PHONY sim
sim:sim.v
./simv -xxx
.PHONY 显示指明伪目标,sim不是要生成的目标文件,只是给操作起的一个名字。由于伪目标总是不存在,所以命令一定会重新执行。
- 默认目标
示例三
.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内部定义变量
示例四
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命令
示例五
tbfile:=$(shell ls *.sv)
rtlfile:=$(shell find rtl -name "*.v")
simv:$(tbfile) $(rtlfile)
vcs -full64 -sverilog $(tbfile) $(rtlfile)
$@ 表示目标, $^ 表示依赖
tbfile:=$(shell ls *.sv)
rtlfile:=$(shell find rtl -name "*.v")
simv:$(tbfile) $(rtlfile)
vcs -full64 -sverilog $^
- 增加选项
示例六
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 POST=1 DUMP=1
- 目录递归