在编译器命令行上传递绝对路径作为预处理程序指令

时间:2010-09-10 07:01:56

标签: c++ visual-studio command-line macros c-preprocessor

我想通过/D定义将MSVC ++ 2008宏传递到我的程序中

/D__HOME__="\"$(InputDir)\""

然后在我的程序中我可以做到这一点

cout << "__HOME__ => " << __HOME__ << endl;

应打印类似

的内容
__HOME__ => c:\mySource\Directory

但它不喜欢反斜杠,所以我实际得到:

__HOME__ => c:mySourceDirectory

有关如何让它发挥作用的任何想法?

更新:我终于得到了Tony的答案,但请注意$(InputDir)包含一个尾部反斜杠,因此实际的宏定义必须有一个额外的反斜杠才能处理它。 .. hackery,如果我看到它!

/D__HOME__="\"$(InputDir)\\""

1 个答案:

答案 0 :(得分:3)

您可以通过在字符串化操作符#前面添加宏来将宏转换为字符串。但是,这仅适用于宏。您实际上需要一个双宏来使其正常工作,否则它只会打印__HOME__

#define STRINGIZE2(x) #x
#define STRINGIZE(x) STRINGIZE2(x)
cout<< "__HOME__ => " << STRINGIZE(__HOME__) << endl;

顺便提一下,包含双下划线的宏保留给C ++中的实现,不应该在你的程序中使用。