我想通过/D
定义将MSVC ++ 2008宏传递到我的程序中
/D__HOME__="\"$(InputDir)\""
然后在我的程序中我可以做到这一点
cout << "__HOME__ => " << __HOME__ << endl;
应打印类似
的内容__HOME__ => c:\mySource\Directory
但它不喜欢反斜杠,所以我实际得到:
__HOME__ => c:mySourceDirectory
有关如何让它发挥作用的任何想法?
更新:我终于得到了Tony的答案,但请注意$(InputDir)
包含一个尾部反斜杠,因此实际的宏定义必须有一个额外的反斜杠才能处理它。 .. hackery,如果我看到它!
/D__HOME__="\"$(InputDir)\\""
答案 0 :(得分:3)
您可以通过在字符串化操作符#前面添加宏来将宏转换为字符串。但是,这仅适用于宏。您实际上需要一个双宏来使其正常工作,否则它只会打印__HOME__
。
#define STRINGIZE2(x) #x
#define STRINGIZE(x) STRINGIZE2(x)
cout<< "__HOME__ => " << STRINGIZE(__HOME__) << endl;
顺便提一下,包含双下划线的宏保留给C ++中的实现,不应该在你的程序中使用。