2017-12-15 11 views
0

Ich versuche, dieses Stück Code zu kompilieren:Wie Anführungszeichen verwenden in einem Makro auf Windows

std::string myString(...) 
if (myString == __MY_MACRO__) { ... } 

In meinem Ant-Skript, ich habe:

<property unless:set="myprop" name="myprop" value="foo" /> 
... 
<compilerarg value='-D__MY_MACRO__="${myprop}"' /> 

Es auf Linux kompiliert aber nicht unter Windows, wo ich die folgende Fehlermeldung erhalten:

[cc] <command-line>:0:27: error: 'foo' was not declared in this scope 
[cc] XXX.cpp:X:Y: note: in expansion of macro '__MY_MACRO__' 
[cc]   if (myString == __MY_MACRO__) { 

ich auch mit

versucht
<compilerarg value="-D__MY_MACRO__=&quot;${myprop}&quot;" /> 

Aber hatte das gleiche Ergebnis.

Danke!

+1

Makros nicht verwenden, wenn eine andere Optionen gibt. –

+0

Funktioniert es, wenn Sie den Code wie folgt ''? –

+1

In dieser Frage geht es mehr darum, wie Java (Ant) die Shell aufruft (cmd?) Und was die Shell mit den Anführungszeichen macht. In jedem Fall ist es keine leichte Aufgabe, Anführungszeichen, Backslashes, Dollarzeichen und dergleichen portabel durch die Shell zu bekommen. – rustyx

Antwort

0

eine Lösung gefunden:

<compilerarg value='-D__MY_MACRO__="\"${myprop}"\"' /> 
Verwandte Themen