CLI上的NMake宏定义包含空格

时间:2015-08-25 13:00:03

标签: escaping nmake

我有一个Makefile,需要设置输出路径。

现在我用

nmake /nologo /f Makefile outdir=%OUTDIR% LANGID=%1 ISO=%2

但如果输出路径包含空格(%OUTPUT%不包含引号),则此方法无效。

此外,nmake的命令行参数解析器中似乎存在一个错误,因此

nmake /nologo /f Makefile outdir="%OUTDIR%" LANGID=%1 ISO=%2

nmake /nologo /f Makefile "outdir=%OUTDIR%" LANGID=%1 ISO=%2

也不行。在这些情况下,outdir将设置为[outdir]" LANGID=[VALUE1] ISO=[VALUE2](我在括号中的cli上提供的值),LANGIDISO根本无法识别。

现在我正在使用(丑陋的)解决方法(请注意,只有双引号)

nmake /nologo /f Makefile LANGID=%1 ISO=%2 outdir="%OUTDIR%

但是,这只有在只有一个命令行参数有空格时才有效。

如何正确地将路径传递给nmake,以便它们在内部有空格的情况下也能正常工作?

1 个答案:

答案 0 :(得分:1)

调用NMAKE时,我没有看到任何特殊的空格问题。但是,使用以反斜杠结尾的目录路径调用NMAKE时会出现问题,因为这会充当转义字符!

我试过这个例子Makefile:

!MESSAGE Makeflags=$(MAKEFLAGS)
!MESSAGE OUTDIR=$(OUTDIR) LANGID=$(LANGID) ISO=$(ISO)
OD=$(OUTDIR)
LI=$(LANGID)
IS=$(ISO)

# To be a valid makefile it must have some rules to perform
all:
    @echo;OUTDIR=$(OUTDIR) LANGID=$(LANGID) ISO=$(ISO)
    @echo;OUTDIR=$(OD)     LANGID=$(LI)     ISO=$(IS)

从命令提示符运行时,我们得到:

C:\Users\Brian>nmake /NOLOGO  "OUTDIR=C:\Program Files\\" "LANGID=C Sharp" "ISO=ISO 8601"
Makeflags=L
OUTDIR=C:\Program Files\ LANGID=C Sharp ISO=ISO 8601
OUTDIR=C:\Program Files\ LANGID=C Sharp ISO=ISO 8601
OUTDIR=C:\Program Files\ LANGID=C Sharp ISO=ISO 8601

您可以看到空格已正确转移到宏值。但是,您还可以在路径名中看到尾部反斜杠的问题。如果我没有正确地逃避这一点,将会出现错误:

C:\Users\Brian>nmake /NOLOGO  "OUTDIR=C:\Program Files\" "LANGID=C Sharp" "ISO=I
SO 8601"
NMAKE : fatal error U1001: Syntaxfehler: ungueltiges Zeichen ' ' in Makro
Stop.

因此,必须仔细编写任何调用NMAKE的批处理文件,以防止出现此特定情况。

为了完整;虽然它们没有解决您的问题,但它们可能是有用的参考: