的documentation告訴我/ d命令行開關可用於執行此操作的,像這樣:如何在VC 2005(C++)中通過命令行創建字符串預處理器定義?
CL /DDEBUG TEST.C
將定義一個DEBUG符號,並且
CL /DDEBUG=2 TEST.C
會給它的值2作爲
#define DEBUG "abc"
這樣。 可是我該怎麼辦,如果我想獲得一個字符串的等效定義,?
的documentation告訴我/ d命令行開關可用於執行此操作的,像這樣:如何在VC 2005(C++)中通過命令行創建字符串預處理器定義?
CL /DDEBUG TEST.C
將定義一個DEBUG符號,並且
CL /DDEBUG=2 TEST.C
會給它的值2作爲
#define DEBUG "abc"
這樣。 可是我該怎麼辦,如果我想獲得一個字符串的等效定義,?
由於單向的命令行在Windows中被解析,你必須避開引號。
CL /DDEBUG=\"abc\" TEST.C
你試過
或
CL /DDEBUG="abc" TEST.C
我沒有然而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";
感謝格倫,第二個可以在命令行上工作,但我已經問過這個爲最終在項目定義中使用這個同事(無需轉義雙引號和替換=爲#) :
/DDEBUG#\"abc\"
這個工作對我來說在VS2013:
/D_STRING="\"abc\""
那麼就相當於
#define _STRING "abc"
注意,如果你這樣做
/D_STRING="abc"
這將等同於
#define _STRING abc
不幸的是,至少MSVC2012下,你無法通過預處理器定義在命令行上參數:( – 2014-08-22 13:33:53