我想像这样通过/D
定义将MSVC++ 2008宏传递到我的程序中
/D__HOME__="\"$(InputDir)\""
然后在我的程序中我可以做到这一点
cout << "__HOME__ => " << __HOME__ << endl;
应该打印类似
__HOME__ => c:\mySource\Directory
但是它不喜欢反斜杠,所以我实际上得到了:
__HOME__ => c:mySourceDirectory
关于如何使它起作用的任何想法?
更新:我终于可以用下面的Tony回答来解决这个问题,但请注意
$(InputDir)
包含尾随反斜杠,因此实际的宏定义必须有一个额外的反斜杠来处理它……如果我看到了,那就是黑客!/D__HOME__="\"$(InputDir)\\""
最佳答案
您可以通过在宏前面加上字符串化运算符#来将宏转换为字符串。但是,这仅适用于宏。实际上,您需要一个双宏才能使其正常工作,否则它将只打印__HOME__
。
#define STRINGIZE2(x) #x
#define STRINGIZE(x) STRINGIZE2(x)
cout<< "__HOME__ => " << STRINGIZE(__HOME__) << endl;
附带地,包含双下划线的宏保留给C++实现,不应在程序中使用。