如何在nmake中转义双引号

时间:2018-10-23 16:45:24

标签: visual-studio-2015 visual-studio-2013 nmake

我试图通过MS Visual Studio 2013+中的nmake脚本通过/D标志将字符串文字传递给编译器。基本模式是:

CPPFLAGS=/DSOME_STRING_VAR="asdf"

main.exe: main.cpp
    $(CPP) $(CPPFLAGS) # ...

在main.cpp内部,我希望能够执行以下操作:

const char *some_string_var = SOME_STRING_VAR;

到目前为止,我尝试的每一种变化都会导致类似的结果:

main.cpp(271) : error C2065: 'asdf' : undeclared identifier

我已经尝试过使用双引号",使用脱字符号^"进行转义,对脱字符号^^^"进行多次转义,以及将双qoute ""加倍。据我所知,所有这些都是批处理脚本的转义语法,但它们似乎在nmake中不起作用。

是否有一种方法可以在nmake中转义双引号,以使它们正确地传递到compile命令中?

对于奖励积分,shell等批处理命令是否执行了nmake命令?即我是否需要担心这里的一两个转义?

如果较新版本启用了更干净的解决方案,我将很高兴支持Visual Studio 2015 +。

1 个答案:

答案 0 :(得分:1)

tldr:使用反斜杠转义双引号。


如果您的测试文件main.cpp是:

#include <iostream>
int main() {
  const char *some_string_var = SOME_STRING_VAR;
  std::cout << some_string_var << std::endl;
}

然后输入命令:

CL /DSOME_STRING_VAR=\"asdf\" main.cpp

将根据需要运行,测试程序将提供:

>.\main.exe
asdf

如果您的makefile是单行:

CPPFLAGS=/DSOME_STRING_VAR=\"asdf\"

然后:

>nmake main.exe

也可以。

我找不到任何参考。在VS2013和VS2017上测试。