如何在 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 上测试。
我正在尝试通过 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 上测试。