批处理命令set的一个小问题:设置变量名与变量值只差一个文件扩展名

来源:互联网 发布:搜狗浏览器for mac 编辑:程序博客网 时间:2024/06/05 02:17

今天想写一个批处理文件,简化VC编译过程,主要内容如下

 

@echo off

set LINK=link.exe
set LFLAGS=/nologo /dll /out:dlltest2.dll /implib:dlltest2.lib

%LINK% %LFLAGS% dlltest2.obj

 

结果无论怎么调试,都会冒出下面的这个错误

LINK : fatal error LNK1181: cannot open input file "link.exe"

 

link.exe明明好好的,而且也不是什么输入文件啊,检查其他部分也是完全没有问题,dlltest2.obj已经编译生成。然后重新在控制台窗口上直接敲命令

link.exe /nologo /dll /out:dlltest2.dll /implib:dlltest2.lib dlltest2.obj

一切OK,没有问题。

 

难道这个批处理有什么猫腻不成,最后费了老半天劲,终于找到原因

set LINK=link.exe

这句话就是症结所在,LINK与link.exe同名了,把LINK改为LNK后问题解决。

 

我发现这个错误可能是由于批处理变量设置死循环后的问题,实际在执行的时候与下面这条命令等价(不能确定,只是发现错误结果相同)

link link.exe /nologo /dll /out:dlltest2.dll /implib:dlltest2.lib dlltest2.obj

 

至于变量设置错误后的详细原因我也没有完全明白,谁有兴趣可以研究一下告诉我。谢谢。

 

参考文档:

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cmd.mspx?mfr=true