win32汇编nmake报错

冷血书生 程序员  2012-04-18 05:20:25
这个是汇编代码:
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
.const
szCaption db '学以致用',0
szText db '加油吧,坚持就是胜利^_^',0
.code
start:
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
invoke ExitProcess,NULL
end start
用ml.exe单独编译和Link 能成功生成exe文件并能执行。
用nmake时出现以下错误:
LINK : fatal error LNK1181: cannot open input file ".asm.obj:"
NMAKE : fatal error U1077: 'Link' : return code '0x49d'
Stop.
我的Makefile文件内容是:
EXE=Mess.exe
OBJS=Mess.obj
RES=Messa.res
LINK_FLAG= /subsystem:windows
ML_FLAG= /c /coff
$(EXE): $(OBJS) $(RES)
Link $(LINK_FLAG) $(OBJS) $(RES)
.asm.obj:
ml $(ML_FLAG) $<
.rc.res:
rc $<
clean:
del *.obj
del *.res
然后设置环境变量的批处理是:
@echo off
set Masm32Dir=E:\masm32
set include=%Masm32Dir%\include
set lib=%Masm32Dir%\lib
set path=%Masm32Dir%\Bin;%Masm32Dir%;%PATH%
set Masm32Dir=
echo on
。。我使用的NMAKE是直接复制到masm32\bin目录下使用的。。
在网上找个几天的没解决问题。希望有人能指点。。谢谢
...全文
215 点赞 收藏 7
写回复
7 条回复
joshua0137 2012年11月23日
好像是文件路径问题
回复 点赞
fanyuanmojun100 2012年11月22日
引用 楼主 linlin22 的回复:
这个是汇编代码: .386 .model flat,stdcall option casemap:none include windows.inc include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib .const s……
你把makefile文件放到源代码和资源文件一起试试把,这样也方便
回复 点赞
fanyuanmojun100 2012年11月22日
引用 4 楼 simaguang 的回复:
我也遇到同样的问题了,源文件是3dframes.asm、mainicon.ico、rsrc.rc 如果makefile这样写,make成功 3dframes.exe:3dframes.obj rsrc.res link /subsystem:windows 3dframes.obj rsrc.res 3dframes.obj:3dframes.asm ……
我也遇到无法删除中间文件的问题 我的make工具是这样的 NAME = Menu OBJS = $(NAME).obj RES = $(NAME).res LINK_FLAG = /subsystem:windows ML_FLAG = /c /coff $(NAME).exe: $(OBJS) $(RES) Link $(LINK_FLAG) $(OBJS) $(RES) .asm.obj: ml $(ML_FLAG) $< .rc.res: rc $< clean: del*.obj del*.res
回复 点赞
SM光 2012年06月20日
我也遇到同样的问题了,源文件是3dframes.asm、mainicon.ico、rsrc.rc


如果makefile这样写,make成功

3dframes.exe:3dframes.obj rsrc.res
link /subsystem:windows 3dframes.obj rsrc.res
3dframes.obj:3dframes.asm
ml /c /coff 3dframes.asm
rsrc.res:rsrc.rc
rc rsrc.rc


clean:
del *.obj
del *.res


exe运行正常。不过奇怪的是,exe生成以后并没有把obj和res删除

而如果makefile这样写就不行

#宏定义
EXE=3dframes.exe
OBJS=3dframe.obj
RES=rsrc.res

LINK_FLAG=/subsystem:windows
ML_FLAG=/c /coff


#关系定义
$(EXE):$(OBJS) $(RES)
link $(LINK_FLAG) /out:$(EXE) $(OBJS) $(RES)
$(OBJS):3dframes.asm


#隐含规则
.asm.obj:
ml $(ML_FLAG) $<
.rc.res:
rc $<


clean:
del *.obj
del *.res

我的编译环境是masm32 sdk version11
回复 点赞
e379278011 2012年06月14日
LZ用的后缀名不是asm的么?
源程序写好后,保存为Mess.asm
回复 点赞
冷血书生 2012年06月14日
不对啊
回复 点赞
BAYNPU 2012年04月18日
打开一个MS-DOS窗口并键入环境变量(假如是:VAR)执行已建立的VAR.BAT,这时环境变量和路径已经设置好了,可键入SET命令验证下INCLUDE和PATH等环境串是否正确,然后键入D:以及\XXX\XXX切换要工作的目录中,并键入nmake,进行编译链接。
回复 点赞
发动态
发帖子
汇编语言
创建于2007-08-27

1.9w+

社区成员

4.1w+

社区内容

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区公告
暂无公告