define in .pro-file in qt-creator

Gast #6352719
Lesenswert?

Hallo,
ich habe in einer .pro file (qt crator unter linux) ein define für ein 
pfad erstellt.
1
DEFINES += PATH = "/mnt/home/project/\n"
in der .c file wird dieses Define aber nicht erkannt (undeclared).

die .pro file includiert eine .pri. Diese beinhaltet dann die .c-datei
Wie bekomme ich das hin, dass das Define im code erkannt wird?
#6352731
Lesenswert?

Laut QT Handbuch:

"DEFINES += USE_MY_STUFF
The above line appends USE_MY_STUFF to the list of pre-processor defines 
to be put in the generated Makefile."

Präprozessor! Also mußt du warscheinlich schreiben:

#ifdef USE_MY_STUFF
 ....
#endif

Oder in deinem Fall sowas wie

std::string path(PATH);
#6352732
Lesenswert?

Marcel schrieb:
> DEFINES += PATH = "/mnt/home/project/\n"

Bist du sicher, dass der Pfad auf ein Newline enden soll? So würde ich 
das als eine Datei oder ein Verzeichnis mit Namen "\n" verstehen, die 
unter "/mnt/home/project" liegt.
Wie dem auch sei, ich würde es mal am Stück probieren:
1
DEFINES += "PATH=/mnt/home/project/\n"
PS:

Wobei dann der Text im C++-Code nicht in Anführungszeichen steht. Da 
müsste man die vermutlich mehrfach escapen.
Laut 
https://stackoverflow.com/questions/3348711/add-a-define-to-qmake-with-a-value 
müsste es so aussehen:
1
DEFINES += PATH=\\\"/mnt/home/project/\\\\n\\\"
#6352835
Lesenswert?

Oliver S. schrieb:
> DEFINES += PATH="/mnt/home/project/"
>
> Keine Leerzeichen, kein \n, Pfad in ""

So kommen die Anführungszeichen aber nicht in C++ an, sondern werden 
schon in qmake entfernt. In der Compiler-Kommandozeile steht dann nur 
noch
1
-DPATH=/mnt/home/project/

Deshalb escapen. Ein einzelnes Escape (also \" statt nur ") reicht aber 
nicht, da dann die Anführungszeichen von der Shell, in der der Compiler 
aufgerufen wird, entfernt werden. Also muss man auch das \ noch escapen, 
also eben \\\".

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren