首页 > Win32 ASM > Makefile详解(一)

Makefile详解(一)

本文文字内容来自罗云彬的《琢石成玉*Windows环境下32位汇编语言程序设计》,转载请注明本原始出处。

2.4.3  描述文件的语法

make工具最主要也是最基本的功能就是通过描述文件来描述源程序之间的相互关系并自动维护编译工作,而描述文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并链接生成可执行文件,并要求定义源文件之间的依赖关系,为了更方便使用,文件中同时可以用一些宏定义。描述文件一般需要包含以下内容:

● 注释

● 宏定义

● 显式规则

● 隐含规则

在这里,首先为2.4.1节中有关test.exe的例子写出一个描述文件,再逐步介绍各部分的书写语法。为了方便使用,一般都把描述文件的文件名取为默认文件名:makefile。这个例子的makefile文件如下(注意前面括号里的是行号,不是文件的真正内容):

(001)   # nmake工具的描述文件例子
(002)   EXE = Test.exe      #指定输出文件
(003)   OBJS =  x.obj \
(004)       y.obj       #需要的目标文件
(005)   RES = x.res     #需要的资源文件
(006)
(007)   LINK_FLAG = /subsystem:windows      #链接选项
(008)   ML_FLAG = /c /coff      #编译选项
(009)
(010)   #定义依赖关系和执行命令
(011)   $(EXE): $(OBJS) $(RES)
(012)       Link $(LINK_FLAG) /out:$(EXE) $(OBJS) $(RES)
(013)   $(OBJS): Common.inc
(014)   y.obj: y.inc
(015)
(016)   #定义汇编编译和资源编译的默认规则
(017)   .asm.obj:
(018)       ml $(ML_FLAG) $<
(019)   .rc.res: 
(020)       rc $<
(021)    
(022)   #清除临时文件
(023)   clean:
(024)       del *.obj
(025)       del *.res

1.注释和换行

 

makefile中的注释是以#号开头一直到行尾的字符,当nmake工具处理到这些字符的时候,它会完全忽略#号及其后面的全部字符。

 

当一行的内容过长的时候,可以用换行符来继续,makefile的换行符是\,如例子中的第3行和第4行可以合并为:


  1. OBJS =  x.obj y.obj     #需要的目标文件 

 

在使用换行符的时候要注意在“\”后面不能再加上其他字符,包括注释和空格,否则nmake检测到“\”不在一行的最后,就不会把它当成换行符解释,从而出现错误。

 

2.宏定义

 

makefile中允许使用简单的宏定义指代源文件及其相关编译信息,可以把宏称为变量,在整个描述文件中,只要符合下面语法的行就是宏定义:变量名=变量内容

 

如上面例子文件中的第2到第8行就是宏定义,在引用宏时只需在变量前加$符号,但是要注意的是,如果变量名的长度超过一个字符,在引用时就必须加圆括号(),下面都是有效的宏引用:


  1. $(LINK_FLAG)  
  2. $(EXE)  
  3. $A  
  4. $(A) 

 

其中最后两个引用是完全一致的。

 

宏定义的使用可以使makefile的使用更灵活:首先可以使文件便于修改,比如把第8行和第18行中ml的选项部分写成宏定义,以后要改变编译选项的时候,只要直接在makefile文件头部改变宏定义就可以了,不必阅读修改整个makefile文件;其次,当不止一个地方用到同一个文件的时候,把文件名定义为宏定义可以减少错误,增加可读性,同时也可以便于修改;最大的好处是可以直接在命令行中用新的宏定义覆盖,比如在命令行中键入:


  1. nmake ML_FLAG="/c /coff /Fl" 

 

那么这时就会以新的/c /coff /Fl定义代替makefile中定义的/c /coff,在这种使用中要注意两个问题:一是宏名称要区分大小写,ML_FLAG和ml_flag是不一样的;二是定义值中有空格的时候要用双引号引起来(没有空格时可以不用双引号,如ML_FLAG=/c),这使临时使用不同的参数编译文件时可以不必修改makefile。


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> Makefile详解(一)
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



分类: Win32 ASM 标签: , , , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.