CLI 上的 NMake 宏定义包含 space
NMake macro definition on CLI which contains a space
我有一个需要设置输出路径的 Makefile。
现在我用
nmake /nologo /f Makefile outdir=%OUTDIR% LANGID=%1 ISO=%2
但如果输出路径包含 spaces(%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 中提供的值)并且根本无法识别 LANGID
和 ISO
。
现在我正在使用(丑陋的)解决方法(注意只有双引号)
nmake /nologo /f Makefile LANGID=%1 ISO=%2 outdir="%OUTDIR%
然而,这仅在只有一个命令行参数具有 spaces 时有效。
如何正确地将路径传递给 nmake,以便它们在内部有 space 的情况下也能正常工作?
我在调用 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 的批处理文件以防止出现这种特定情况。
为了完整性;虽然它们没有解决您的问题,但它们可能是有用的参考资料:
所以问题:How to escape white space in nmake
NMAKE 中特殊字符和转义字符的作用在 manual.
中介绍
我有一个需要设置输出路径的 Makefile。
现在我用
nmake /nologo /f Makefile outdir=%OUTDIR% LANGID=%1 ISO=%2
但如果输出路径包含 spaces(%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 中提供的值)并且根本无法识别 LANGID
和 ISO
。
现在我正在使用(丑陋的)解决方法(注意只有双引号)
nmake /nologo /f Makefile LANGID=%1 ISO=%2 outdir="%OUTDIR%
然而,这仅在只有一个命令行参数具有 spaces 时有效。
如何正确地将路径传递给 nmake,以便它们在内部有 space 的情况下也能正常工作?
我在调用 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 的批处理文件以防止出现这种特定情况。
为了完整性;虽然它们没有解决您的问题,但它们可能是有用的参考资料:
所以问题:How to escape white space in nmake
NMAKE 中特殊字符和转义字符的作用在 manual.
中介绍