如何在 nmake 中转义双引号

How to escape a double quote in 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

我试过一个双引号 ",用插入符转义 ^",多次转义插入符 ^^^",并加倍双引号 "".据我所知,所有这些都是批处理脚本的转义语法,但它们似乎在 nmake 中不起作用。

有没有办法在 nmake 中转义双引号,以便它们正确地传递到编译命令中?

为了加分,nmake命令是由shell这样的批量执行的吗? IE。我必须担心这里的一两个级别的转义吗?

如果新版本启用了更清晰的解决方案,我很乐意支持 Visual Studio 2015+。

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 上测试。