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