2009-08-20 43 views

回答

5

由於單向的命令行在Windows中被解析,你必須避開引號。

CL /DDEBUG=\"abc\" TEST.C 
2

你試過

CL /DDEBUG="abc" TEST.C 
-1

我沒有然而VC測試這個給你,原則上應如下工作:

CL /DSTRINGIFY(X)=#X /DDEBUG=STRINGIFY(abc) TEST.C 

更新:

As highligh由庫伯 - 奧伯(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"; 
+0

不幸的是,至少MSVC2012下,你無法通過預處理器定義在命令行上參數:( – 2014-08-22 13:33:53

0

感謝格倫,第二個可以在命令行上工作,但我已經問過這個爲最終在項目定義中使用這個同事(無需轉義雙引號和替換=爲#) :

/DDEBUG#\"abc\" 
0

這個工作對我來說在VS2013:

/D_STRING="\"abc\"" 

那麼就相當於

#define _STRING "abc" 

注意,如果你這樣做

/D_STRING="abc" 

這將等同於

#define _STRING abc