我试图通过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 +。
答案 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上测试。