如何在nmake中转义双引号

Posted

技术标签:

【中文标题】如何在nmake中转义双引号【英文标题】:How to escape a double quote in nmake 【发布时间】:2018-10-23 16:45:24 【问题描述】:

我正在尝试通过 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+。

【问题讨论】:

【参考方案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 上测试。

【讨论】:

以上是关于如何在nmake中转义双引号的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 标签中转义双引号?

如何在标题属性中转义双引号

如何在 PHP 的 mysqli_query() 中转义双引号字符?

如何在包含变量的逐字字符串中转义双引号

如何在 T-SQL 中的 XML 字符串中的属性中转义双引号?

我可以在逐字字符串文字中转义双引号吗?