如何在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中转义双引号的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PHP 的 mysqli_query() 中转义双引号字符?