Forum: PC-Programmierung define in .pro-file in qt-creator


von Marcel (Gast)


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?

von Thomas W. (goaty)


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);

von Rolf M. (rmagnus)


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\\\"

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

DEFINES += PATH="/mnt/home/project/"

Keine Leerzeichen, kein \n, Pfad in ""

Allerdings sollte der Compiler in Fehlerfall schon die Kommandozeile 
anmeckern, und gar nicht erst weitermachen.

Oliver

: Bearbeitet durch User
von Rolf M. (rmagnus)


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 \\\".

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.