文档告诉我,
/D
命令行开关可用于执行此操作,如下所示:
CL /DDEBUG TEST.C
这将定义一个调试符号,并且
CL /DDEBUG=2 TEST.C
会给它值 2。
但是,如果我想获得字符串定义的等效项,如下所示,我该怎么办?
#define DEBUG "abc"
由于 Windows 中命令行的解析方式,您必须转义引号。
CL /DDEBUG=\"abc\" TEST.C
这在 VS2013 中对我有用:
/D_STRING="\"abc\""
那么就相当于
#define _STRING "abc"
请注意,如果你这样做
/D_STRING="abc"
这将相当于
#define _STRING abc
谢谢 Glen,第二个可以在命令行上工作,但我要求的同事最终在项目定义中使用了它(需要转义双引号并将 = 替换为 #):
/DDEBUG#\"abc\"
尝试:
CL /DDEBUG=abc TEST.C
或
CL /DDEBUG="abc" TEST.C
我没有 VC 来为你测试这个,但是,原则上以下应该可行:
CL /DSTRINGIFY(X)=#X /DDEBUG=STRINGIFY(abc) TEST.C
更新:
正如 Kuber-Ober 所强调的那样,VC 在这里似乎没有做正确的事情。用一个简单的例子进行测试,它会生成:
const char * s = STRINGIFY(abc);
它可以与其他编译器一起使用,例如以下 g++ 命令行可以工作:
g++ -D'STRINGIFY(X)=#X' -D'DEBUG=STRINGIFY(abc)' t.cc -E
# 1 "t.cc"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "t.cc"
const char * s = "abc";