【Arrogant Wurm】简单的makefile

makefile其实不是很难的东西。干嘛用呢?主要是针对C语言里面很多的地方都要用到增量编译的过程,所以makefile自动增量编译的特性好用的很,但是我基本不用这东西,所以就是和我平常写的简单的调试nc的脚本很像的。

先上代码吧还是,再慢慢讲要点吧。

WORK_DIR    =   .
VLOG_FILES  =   div16.v tb.v
TOP_NAME    =   tb

COMPILER    =   ncvlog
ELABORATOR  =   ncelab
SIMULATOR   =   ncsim

COMP_OPT    =   -64bit -messages -nocopyright
ELAB_OPT    =   -64bit -messages -nocopyright -access +rwc -timescale 1ns/100ps $(TOP_NAME):module
SIM_OPT     =   -64bit -messages -nocopyright -gui -nokey -input simvis.tcl $(TOP_NAME):module
################################################################################
default
: clean compile elaborate simulate ################################################################################ compile: $(COMPILER) $(COMP_OPT) $(VLOG_FILES) elaborate: $(ELABORATOR) $(ELAB_OPT) simulate: $(SIMULATOR) $(SIM_OPT) clean: -rm -rf $(WORK_DIR)/INCA_libs/ $(WORK_DIR)/*.log #################################################################################

简述,

make首先从指定的文件(通常称为make文件,其默认名为Makefile或makefile)中获取关于可执行程序及程序模块间的相互关系的信息;然后根据文件的最后修改日期找出那些经过编译、但却已经“过时”的模块,这里,“过时”是指用来生成这些模块的源文件已经被修改过了,但这些模块本身却未被更新;最后,make将针对每一个“过时”的模块,按其相互关系中所给出的命令对该“过时”模块进行更新操作。make使用的时候是调用系统的make命令,在当前目录下找makefile/Makefile,来执行这个文件内的内容,首先找到的一个object用来执行,它里面包含了什么操作就会依次的去找执行什么操作(默认clean放在最后)。于是看上面的例子里,前面都是定义的一些变量或者是选项之类的。之后就有几个要执行的命令,make默认会执行第一个命令,就是default,default会依赖于后面的clean compile elaborate simulate几个,之后make执行的时候会走default,发现default依赖于后面的clean...它就再去找clean,执行clean下面的命令,注意,这里的命令前面一定要有tab就是^I,不然的话语法会报错(有点二),搞好了之后就可以执行了,插一句,rm命令前面的减号-,代表的是当这个命令产生错误的时候不要care,继续执行的意思。还要注意的就是对变量引用的格式 $(VARIABLE),剩下就是#来代表注释,没别的要点了。

 

再有要点就是结构,摘抄

在make中,目标和生成该目标的源文件之间的关系称为依赖关系。一个目标的状态完全取决与它所依赖的那些对象的状态,一旦依赖对象的状态发生改变,make就执行依赖关系中所定义的那组命令来重新生成该目标。在make中,描述依赖关系的语句是放在make文件中的,其语法格式为:

object : source_list
    [[@]cmd_list]

其中,object是被定义的目标,source_list是它所依赖的对象,object和source_list之间用冒号分隔,当包含多个依赖对象时用空格将它们分隔开,cmd_list是一组命令,它告诉make如何将source_list生成object,如果在某条命令前加上字符@,则表示执行时不显示该命令。当然,cmd_list是可以省略的。需要注意的是:object前面不能有空格(可以有制表符Tab),cmd_list前面也是制表符,而不能有空格,否则,make认为有语法错误。

ok,相信你已经可以搞个简单的makefile咯。具体更进一步的用法可以参考《跟我一起写 Makefile》by陈皓

posted @ 2012-11-03 20:53  poiu_elab  阅读(647)  评论(0编辑  收藏  举报