精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>编辑、编译、调试与发行>>关于makefile(2)

主题:关于makefile(2)
发信人: galfordli()
整理人: wenbobo(2002-12-06 23:28:13), 站内信件

#                                                                     
      *
# THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF AN
Y     *
# KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 
      *
# IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULA
R     *
# PURPOSE.                                                            
      *
#                                                                     
      *
# Copyright (C) 1993-95  Microsoft Corporation.  All Rights Reserved. 
      *
#                                                                     
      *
#*********************************************************************
*******
#                                                                     
     
#       Makefile for serial device
#
######################################################################
####

!ifdef MASTER_MAKE
BUILD_BITS=32
BUILD_TYPE=comm
!INCLUDE $(DDKROOT)\master.mk
!endif

#这是一个串口VxD的MAKE文件

#先定义了一个设备名的宏DEVICE
DEVICE = SERIAL

#所有的目标文件
OBJS = serial.obj serutil.obj serfunc.obj serinit.obj serdbg.obj

########## Definitions ###############################

ASM     = ml
AFLAGS  = -coff -DBLD_COFF -DIS_32 -nologo -W2 -Zd -c -Cx -DMASM6
ASMENV  = ML

LFLAGS  = /VXD /NOD

############## VxD device link rule ###################

.asm.obj:
#下面一行设置了环境变量 用上面定义的宏替换就是
#set ML=-coff -DBLD_COFF -DIS_32 -nologo -W2 -Zd -c -Cx -DMASM6
set $(ASMENV)=$(AFLAGS)
#当ML环境变量设置后,在执行ml就不必写命令行选项了
#下面一行就是引用规则,/Fo选项指定目标文件名
$(ASM) -Fo$*.obj $<

#下面是生成sym文件(即符号文件)的规则,
$(DEVICE).SYM: $(DEVICE).MAP
#mapsym.exe将map文件转换为sym文件
mapsym -s -o $(DEVICE).sym $(DEVICE).map

#下面是生成vxd和map文件的规则
$(DEVICE).VXD $(DEVICE).MAP: $(OBJS)
#这里涉及到两个重要的概念,响应文件(Response File)和内联文本(Inlinete
xt),
#响应文件作为link的输入,也是文本文件,它包括link所需的命令行选项和对提
示的响应
#响应文件的用法是link @responsefile,并不要求特定的扩展名,这里的响应文

#是serial.lnk。
#内联文本,写在make文件中的一段文本,与一个内联文件名对应,而内联文件要
作为程序的输入
#如下面的serial.lnk和serial.def都是内联文件。
#"<<"作为一段内联文本的结束标志,可以看出serial.lnk是从“$(LFLAGS)”开
始的
#而serial.def是从“VXD $(DEVICE) DYNAMIC”开始的。至于def文件的结构
link @<<$(DEVICE).lnk /DEF:<<$(DEVICE).def
#应该看得出下面的宏是link的命令行选项
$(LFLAGS)
#下面两行是对link程序提示的响应
#用过link的都知道它会问你输出文件和map文件名(这就是提示(prompt))
/OUT:$(DEVICE).VXD
/MAP:$(DEVICE).map
$(OBJS)
<<
#下面是def文件的结构,大家应该比较熟悉了吧,我也就不献丑了。
VXD $(DEVICE) DYNAMIC
DESCRIPTION '$(DEVICE) Device'

SEGMENTS
_LPTEXT CLASS 'LCODE' PRELOAD NONDISCARDABLE
_LTEXT CLASS 'LCODE' PRELOAD NONDISCARDABLE
_LDATA CLASS 'LCODE' PRELOAD NONDISCARDABLE
_TEXT CLASS 'LCODE' PRELOAD NONDISCARDABLE
_DATA CLASS 'LCODE' PRELOAD NONDISCARDABLE
CONST CLASS 'LCODE' PRELOAD NONDISCARDABLE
_BSS CLASS 'LCODE' PRELOAD NONDISCARDABLE
_ITEXT CLASS 'ICODE' DISCARDABLE
_IDATA CLASS 'ICODE' DISCARDABLE
_PTEXT CLASS 'PCODE' NONDISCARDABLE
_PDATA CLASS 'PCODE' NONDISCARDABLE
_STEXT CLASS 'SCODE' RESIDENT
_SDATA CLASS 'SCODE' RESIDENT
_16ICODE CLASS '16ICODE' PRELOAD DISCARDABLE
_RCODE CLASS 'RCODE'
EXPORTS
$(DEVICE)_DDB @1
<<

clean:
-@del *.obj
-@del *.lib
-@del *.exp
-@del *.map
-@del *.sym
-@del *.vxd

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.99.77.71]

[关闭][返回]