这一段时间由于想写一点汇编的东西,便重新拾起老罗的书(原先看了一遍,并未深究)。回到老路上的我,只能重新按书中配置的编译环境来编译汇编程序。刚开始没看懂nmake的使用说明,愣是头疼了N天。
总算是弄明白了如何的写简单的Makefie文件了(参考罗总的书)。
Makefile是与make(windows程序下叫做nmake,在VC6.0的bin目录中可以找到)工具息息相关的文件,make工具是通过Makefile文件来维护代码(就是ml*.asm文件生成*.obj,link *.obj文件生成*.exe等)。当然make工具可以在命令行下输入一些参数来完成整个程序的编译工作。但是,那是相当的麻烦(如果一个程序很大,用到的文件很多时,我们可能要敲命令到手软啊,哈哈!)。
今天我看了Makefile的一些基本知识,现在与大家共享一下,顺便巩固一下知识点。如不明白可参看罗云彬的书。
首先我们来看一个Makefile文件:
#nmake工具的描述文件例子
EXE = Test.exe #指定输出文件
OBJS = x.obj /
y.obj #需要的目标文件
RES = x.res #需要的资源文件
LINK_FLAG = /subsystem:windows
ML_FLAG = /c /coff
#定义依赖关系和执行命令
$(EXE) : $(OBJS) $(RES)
Link $(LINK_FLAG) /out:$(EXE) $(OBJS) $(RES)
$(OBJS) : Common.inc
y.obj : y.inc
#定义汇编编译和资源编译的默认规则
.asm.obj
ml $(ML_FLAG) $<
.rc.res
rc $<
#清除临时文件
clean:
del *.obj
del *.res
知识点:
1 注释 :
注释都已#号开头,相当于VC中的//或者/* ....*/
当一行过长时,可以用换行符"/",但"/"后不能有其他的字符包括注释和空格。
2宏定义:
可以把宏成为变量,符合语法 : 变量名 = 变量内容 就是宏定义
LINK_FLAG = LINK_FLAG = /subsystem:windows
$(LINK_FLAG) 在引用宏是变量前加$,变量名长度超过一个字符时要加()
$A
$(A)
3 显示规则 :
目标文件 : 依赖文件; 命令
目标文件 :依赖文件
(一个TAB)命令
$(EXE) : $(OBJS) $(RES) #目标文件:依赖文件
Link $(LINK_FLAG) /out:$(EXE) $(OBJS) $(RES) #命令
以上为显示规则nmake工具按照显示规则的定义执行命令
4 隐式规则 :
$(OBJS) : Common.inc
y.obj : y.inc
当nmake工具发现规则中并没有命令那么他会认为该规则为隐式规则,即遵循默认规则(当然还得自己写)
.asm.obj
ml $(ML_FLAG) $< #当然要被
.rc.res
rc $<
$<--------源文件名(只能用于隐式规则)
rc $<用于x.rc 的时候就是 rc x.rc 对于y.rc 就是 rc y.rc
本文大概总结了一下常用的知识点,遇见新情况,Google见。哈哈!!!