Forum: Mikrocontroller und Digitale Elektronik ifdef unklar


von IchHeuleGleich (Gast)


Lesenswert?

Makefile:
DEBUGFLAGS= -DDEBUG_A

Datei:

#ifdef DEBUG_A
 test = 6;
#else
 test = 9;
#endif

So Leute ich habe ein kleines Problem. Ich habe im Makefile DEBUG_A 
definiert.
In meinem Program will ich je nach dem ob das Define da ist oder nicht 
die Variable test verändern. Leider ist, egal ob DEBUGFLAGS= -DDEBUG_A 
da ist oder nicht, test immer 9.
habt ihr ne Idee waran das liegen könnte?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wertet denn irgendwas DEBUGFLAGS aus? Steht das in Deinem makefile noch 
an irgendner anderen Stelle?

von Udo S. (urschmitt)


Lesenswert?

Du teilst deinem Compiler im makefile die DEBUGFLAGS auch korrekt mit?

Stell im Zweifel mal dein makefile hier rein.

von IchHeuleGleich (Gast)


Lesenswert?

Ne, nur an der Stelle

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

IchHeuleGleich schrieb:
> habt ihr ne Idee waran das liegen könnte?
DEBUGFLAGS wird nicht an den Compiler gegeben...
Wie sieht die Kommandozeile des Compileraufrufs aus?

von IchHeuleGleich (Gast)


Lesenswert?

Problem gelöst.

ich habe das define einfach in die Datei verschoben.

Trotzdem Danke

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

IchHeuleGleich schrieb:
> Problem gelöst.
"umgangen" wäre richtiger... ;-)

von Christian F. (cmf) Benutzerseite


Lesenswert?

IchHeuleGleich schrieb:
> Problem gelöst.
>
> ich habe das define einfach in die Datei verschoben.
>
> Trotzdem Danke

Naja. Ich wäre damit nicht zufrieden.

von Karl H. (kbuchegg)


Lesenswert?

Ein Problem ist erst dann tatsächlich 'gelöst', wenn du exakt und genau 
verstehst, wie es entstanden ist. Vorher ist es nur ein 'aus den Augen, 
aus dem Sinn'.

Und genau das ist eines der generellen Probleme unserer Zeit: Wir lösen 
Probleme nicht mehr, wir sorgen nur dafür, dass sie keiner mehr sieht. 
Wir fragen uns nicht, wie wir unsere Müllberge grundsätzlich wegkriegen 
sondern wir türmen den Müll zu Bergen auf und schütten Erde drüber. Bis 
sich dann in 20 Jahren zeigt, dass sich dadurch alles nur noch 
verschlimmert hat und eine Sanierung 100 mal so viel kostet, als wie 
wenn man gleich eine bessere Lösung als simples Verstecken angestrebt 
hätte.

von Udo S. (urschmitt)


Lesenswert?

IchHeuleGleich schrieb:
> Problem gelöst.
>
> ich habe das define einfach in die Datei verschoben.
>
> Trotzdem Danke

Das ist doch blöd.
Der Sinn ist doch daß du das einmal in makefile definierst (oder beim 
make Aufruf sogar mitgibst und das dann in allen h und c files wirkt.
So musst du es mindestens in einem zentralen H file definieren und dann 
aber sicherstellen daß dieses h file in allen anderen c und h files am 
Anfang includiert ist.

Du hättest einfach im make file beim compiler aufruf die DEBUGFLAGS mit 
übergeben müssen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Karl Heinz Buchegger schrieb:
> Bis sich dann in 20 Jahren zeigt, dass sich dadurch alles nur noch
> verschlimmert hat und eine Sanierung 100 mal so viel kostet,
Hundertmal? Du bringst mich auf eine Idee: ich melde mal schon ein 
Gewerbe als Müllkippensanierer an. Denn schon an der Aufschüttung konnte 
man sich da schnell eine goldenen Nase verdienen...

@ IchHeuleGleich
Ich denke auch, dass dich dieser Workaround nochmal einholt. Und das 
dauert weniger als 20 Jahre...

von IchHeuleGleich (Gast)


Lesenswert?

Das Prob ist immer die Zeit. So kann ich jetzt weiterarbeiten. Wenn das 
Problem das nächjste mal auftritt muss ich es lösen.
Für Vorschläge zur Lösung wäre ich trotzdem dankbar.

von #elseif (Gast)


Lesenswert?

... wie schon geschrieben wurde, poste doch mal das Makefile!

Alles andere wäre pure Spekulation.

von Udo S. (urschmitt)


Lesenswert?

IchHeuleGleich schrieb:
> Für Vorschläge zur Lösung wäre ich trotzdem dankbar.

Sag mal willst du uns verarschen?
Was glaubst du ist das?

Udo Schmitt schrieb:
> Du hättest einfach im make file beim compiler aufruf die DEBUGFLAGS mit
> übergeben müssen.

von Karl H. (kbuchegg)


Lesenswert?

IchHeuleGleich schrieb:
> Das Prob ist immer die Zeit. So kann ich jetzt weiterarbeiten. Wenn das
> Problem das nächjste mal auftritt muss ich es lösen.
> Für Vorschläge zur Lösung wäre ich trotzdem dankbar.

Du musst noch viel lernen :-)
Jedes Problem, das du ungelöst vor dir herschiebst, kostet dich auf 
lange Sicht gesehen mehr Zeit, als wie wenn du dich gleich um eine 
Lösung bemühst.

Irgendwann sieht das jeder ein, das die 'Ich hab zwar keine Ahnung warum 
aber solange es jetzt funktioniert ist es gut' Strategie keine gute 
Strategie ist. Alles schon hundertemale passiert. Und noch jedes 
einzelne mal war es so, dass ich mir hinterher gewünscht hätte, ich 
hätte das Problem gleich richtig gelöst, anstatt nur ein 'Heftpflaster' 
draufzukleben.

> Das Prob ist immer die Zeit.
Da hast du recht. Aber anders als du denkst.

Noch dazu, wo man bei deinem Problem höchst wahrscheinlich mit einem 
Blick ins Makefile das Problem in weniger als 2 Minuten lösen könnte.

von IchHeuleGleich (Gast)


Lesenswert?

@ Udo:

wenn du mit deinem Leben unzufrieden bist. Lass es bitte nicht an mir 
aus:

Makefile:
DEBUGFLAGS= -DDEBUG_A

@Karl Heinz Buchegger:

makefile kommt heute abend. habe es auf einem anderen Rechner.

von Karl H. (kbuchegg)


Lesenswert?

IchHeuleGleich schrieb:

> wenn du mit deinem Leben unzufrieden bist. Lass es bitte nicht an mir
> aus:
>
> Makefile:
> DEBUGFLAGS= -DDEBUG_A

Das kann nicht das komplette Makefile sein.
Ausserdem ist es an dieser Stelle (noch) uninteressant, was du da 
konkret hingeschrieben hast. Entscheidend ist: Wo wird DEBUGFLAGS 
verwendet! Wird das überhaupt beim Compileraufruf mitgegeben? Derartige 
Variablen kannst du im Makefile haben so viele du willst. So lange sie 
beim tatsächlichen Build dann nicht verwendet werden, ist das alles 
Schall und Rauch.

von IchHeuleGleich (Gast)


Lesenswert?

IchHeuleGleich schrieb:
> @Karl Heinz Buchegger:
>
>
>
> makefile kommt heute abend. habe es auf einem anderen Rechner.

von Rolf Magnus (Gast)


Lesenswert?

IchHeuleGleich schrieb:
> @ Udo:
>
> wenn du mit deinem Leben unzufrieden bist. Lass es bitte nicht an mir
> aus:

Er ist nicht mit seinem Leben, sondern mit deiner Antwort unzufrieden.
Du fragst nach einer Lösung, obwohl diese gerade davor schon genannt 
wurde.
Um's nochmal ausführlich zu erklären:
Du kannst natürlich in deinem Makefile eine Variable DEBUGFLAGS 
definieren und da irgendwas reinschreiben. Dann liegt die da erstmal so 
rum. Dem Compiler ist das  allerdings völlig wurscht. Der sieht diese 
Variable nicht mal. Du kannst sie genausogut HURRZ nennen und "Blubblub" 
reinschreiben, das hat den selben Effekt. Wenn die Variable auch eine 
Auswirkung haben soll, muß erstmal irgendwas damit getan werden. In 
diesem Fall müßtest du im Makefile dort, wo der Compiler aufgerufen 
wird, den Inhalt der Variable an diesen übergeben.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Rolf Magnus schrieb:
> Dem Compiler ist das  allerdings völlig wurscht. Der sieht diese
> Variable nicht mal.
Aus diesem Grund fragte ich schon im
Beitrag "Re: ifdef unklar"
nach der Compiler-Kommandozeile. Die sieht man meistens in der Konsole 
der aufrufenden IDE. Oder im Logfile...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Um es für unseren TE mal auf Programmiersprach-Niveau umzumünzen:

Das, was du da gerade machst, ist ungefähr so, als würdest du in
deinem C-Programm eine Variable definieren:
1
const char message[] = "Das ist alles Mist hier!";

und dann erwarten, dass ebendiese Mitteilung beim Start des
Programms auf ganz magische Weise von allein auf das LCD
ausgeschrieben wird, nur weil die Variable doch schließlich
"message" heißt.

von #error (Gast)


Lesenswert?

IchHeuleGleich schrieb:
> makefile kommt heute abend. habe es auf einem anderen Rechner.

Tja, dann ist jetzt ja alles klar, seid (seid gestern) das Makefile "da" 
ist.
Kann nicht funktionieren, ist leer!

von Screenshot (Gast)


Lesenswert?

>DEBUGFLAGS= -DDEBUG_A

" " muss weg!

also so:

DEBUGFLAGS=-DDEBUG_A

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.