Makefile 脚本(附Makefile+VCS+Verdi)

本文介绍了Makefile的基本要素,包括规则定义目标文件的生成方式,伪目标如clean用于清理,变量提升Makefile的通用性,以及隐含规则和通配符简化文件匹配。此外,还展示了结合VCS和Verdi进行编译、仿真及日志管理的Makefile脚本。
摘要由CSDN通过智能技术生成

1. Makefile 规则

规则:用于说明如何生成一个或者多个目标文件

目标项:要生成的文件名。

依赖项:要生成目标文件所需要的文件。

编译命令:如果依赖项生成目标项,必须以TAB开头。

规则格式:

target:dependency_files    //目标项:依赖项 
<TAB>command                //必须以tab开头,command编译命令

    注意点:在写command命令行的时候,必须要在前面按TAB键。

    例如:目标项是test,依赖项是test.c。

test:test.c
    gcc -o test test.c

2. Makefile的伪目标

.PHONY 是Makefile文件的关键字,表示它后面列表中的目标均为伪目标。伪目标通常用在清理文件、强制重新编译等情况下。一般伪目标没有时间检查,一旦指明了就会执行。

.PHONY:clean        //将clean声明为伪目标,可以同时声明多个伪目标
clean:              //没有依赖项  
    rm -rf test

3. Makefile的变量

 通过make 支持的变量定义、规则和内置函数,可以写出通用性较强的Makefile文件,使得同一个Makefile文件能够适应不同的项目。变量类似于c语言中的宏定义。

 变量:用来代替一个文本字符串

定义变量的2种方法:

        变量名=变量值 递归变量展开(几个变量共享一个值)        //替换        

        变量名:=变量值 简单变量展开                                               //恒等于 

 使用变量的一般方法:

        $(变量名)=???                                                                   //赋值

        ???=$(变量名)                                                                   //引用

如下Makefile展示了用定义变量来编写。

#circle.c circle.h cube.c cube.h main.c main.h
#得到可执行文件test

test:circle.o cube.o main.o
    gcc circle.o cube.o main.o -o test
    
circle.o:circle.c
    gcc -c circle.c -o circle.o
    
cube.o:cube.c
    gcc -c cube.c -o cube.o    
 
main.o:main.c
    gcc -c main.c -o main.o     

.PHONY:
cleanall:
    rm -rf test circle.o cube.o main.o
clean:
    rm -rf circle.o cube.o main.o
    
#-------------定义变量如下-----------------#        
TAR = test                      #(目标文件)
OBJ = circle.o cube.o main.o    #(依赖文件)
CC := gcc                       #(gcc恒定不变)
RMRF:=rm -rf

$(TAR):$(OBJ)
    $(CC) $(OBJ) -o $(TAR)

circle.o:circle.c
    $(CC) -c circle.c -o circle.o
    
cube.o:cube.c
    $(CC) -c cube.c -o cube.o    
 
main.o:main.c
    $(CC) -c main.c -o main.o 

.PHONY:
cleanall:
    $(RMRF) $(OBJ) $(TAR)
clean:
    $(RMRF) $(OBJ)

4. Makfile隐含规则 &通配符

 %.c;%.o     //(任意的.c;.o文件)
 *.c;*.o     //(所有的.c;.o文件)
 $@          //所有的目标文件
 $^          //所有的依赖文件
 $<          //所有的依赖文件的第一个文件
TAR = text                      (目标文件)
OBJ = circle.o cub.o main.o     (依赖文件)
CC := gcc                       (gcc恒定不变)
RMRF:=rm -rf

$(TAR):$(OBJ)
    $(CC) $^ -o $@ 

%.o:%.c
    $(CC) -c $^ -o $@

.PHONY:
clean:
    $(RMRF) $(OBJ) $(TAR)

5. Makefile+VCS+Verdi脚本

 以下附上我自己用VCS+Verdi联合编译仿真用到的Makefile脚本。

all: compile simulate verdi

compile: 
	vcs -full64				\ #以linux64位系统运行
		-fsdb				\ #生成.fsdb波形文件
		-sverilog			\ #支持systemverilog语法
		-debug_acc+all		\ #编译命令
		-timescale=1ns/1ps	\ #仿真时间单位/精度
		-f flist.f			\ #链接工程文件
		-l com.log            #生成编译过程的日志

simulate:
	./simv -l sim.log         #启动仿真

verdi:
	verdi -2001	        \     #支持2001标准
          -ssf *.fsdb   \     #启动verdi自动加载.fsdb波形文件
		  -top tb       \     #指定tb模块位仿真顶层文件          
		  -f flist.f    \     #链接工程文件
          -nologo &           #软件打开界面不加载欢迎界面

clean:
	-rm -rf simv.daidir	\   #删除过程文件
			verdiLog	\
			csrc		\
			ucli.key	\
			simv		\
			*.log		\
			*.fsdb		\
			*.conf		\
			*.rc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值