Forum: Mikrocontroller und Digitale Elektronik Probleme beim benutzen von header


von Jana (Gast)


Lesenswert?

Hallo,

Mein Source Code (C) liegt in verzeichnis "A". Jetzt muss ich eine 
Header anziehen, welche im Verzeichnis "B" liegt. Diese zieht wiederum 
eine Header an, welche aber ebenfalls im Verzeichnis "B" liegt. Beim 
Bauen bekomme ich jetzt die Fehlermeldung, dass die zweite angezogene 
Header nicht gefunden werden kann.

Verzeichnis A
a.c
1
#include "..\..\VerzichnisB\Include\headerB.h"

VerzeichnisB
headerB.h
headerC.h

in headerB.h steht dann
1
#include <headerC.h>

Die Fehlermeldung ist:
could not open source file "headerC.h"
#include <headerC.h>

diese Befindet sich aber definitiv im selben Ordner und zieht selber 
nichts mehr an

Wie bekomme ich es hin, dass ich headerB.h anziehen kann?

von Stefan F. (Gast)


Lesenswert?

Versuche mal / anstelle von \.

von WIRO (Gast)


Lesenswert?

Funktioniert es denn, wenn die Verzeichnisangaben nicht relativ sondern 
absolut gemacht werden <lw:\pfad\Dateiname>?

Gruß,
WIRO

von Stefan F. (Gast)


Lesenswert?

WIRO schrieb:
> Funktioniert es denn, wenn die Verzeichnisangaben nicht relativ sondern
> absolut gemacht werden <lw:\pfad\Dateiname>?

Bei mir sicher nicht, weil mein Rechner gar nicht weiß, was 
Laufwerksbuchstaben sind. Also: Nein. Quelltexte sollten unabhängig vom 
Rechner sein, auf dem compiliert wird.

von Timmo H. (masterfx)


Lesenswert?

Du müsstest in HeaderB den Pfad auch wie in a.c schreiben. Das include 
ist quasi ein komplettes einfügen a.c.
Darum ist es bei sowas auch besser das ganze Verzeichnis B in den 
Compiler Pfad mit auf zunehmen und dann ohne Pfad im include zu arbeiten

von DPA (Gast)


Lesenswert?

Jana schrieb:
> #include "..\..\VerzichnisB\Include\

Sag dem Kompiler direkt, dass dort includes sind, und lass das mit den 
unnötig langen Pfaden in den includes in den C Dateien. Bei GCC ist das 
die -I option.

von WIRO (Gast)


Lesenswert?

Warum sollte sich beim include auch das aktuelle Verzeichnis ändern?
Dann würde ich in headerB.h folgende Zeile verwenden:

  #include "..\..\VerzichnisB\Include\headerC.h"

Gruß,
WIRO

von Jana (Gast)


Lesenswert?

Stefanus F. schrieb:
> Versuche mal / anstelle von \.

WIRO schrieb:
> Funktioniert es denn, wenn die Verzeichnisangaben nicht relativ sondern
> absolut gemacht werden <lw:\pfad\Dateiname>?

headerB.h wird ja gefunden. Nur die Header, welche von headerB.h 
aufgerufen wird, wird nicht gefunden

von Stefan F. (Gast)


Lesenswert?

Jana schrieb:
> Nur die Header, welche von headerB.h
> aufgerufen wird, wird nicht gefunden

Logisch, weil er denkt, dass die Datei 
"..\..\VerzichnisB\Include\headerB.h" heißt und im aktuellen Verzeichnis 
liegt.

Er soll aber wissen, dass die Datei "headerB.h" heisst und im 
Verzeichnis "..\..\VerzichnisB\Include\" liegt, damit relative Pfade 
innerhalb dieser Datei auf das Verzeichnis "..\..\VerzichnisB\Include\" 
angewendet werden.

von Timmo H. (masterfx)


Lesenswert?

Jana schrieb:
> headerB.h wird ja gefunden. Nur die Header, welche von headerB.h
> aufgerufen wird, wird nicht gefunden
Ja weil das #include <headerC.h> quasi von a.c heraus aufgerufen wird 
und das liegt nunmal nicht in VerzeichnisB

von Stefan F. (Gast)


Lesenswert?

Für Windows sind Pfad und Dateiname einfach nur ein langer String, aber 
der Präprozessor (des Compilers) muss das aufsplitten, um die relativen 
Pfade richtig zusammen zu setzen.

Er muss aber wissen, dass die Datei "headerB.h" heisst und im 
Verzeichnis "..\..\VerzichnisB\Include\" liegt, damit relative Pfade 
innerhalb dieser Datei auf das Verzeichnis "..\..\VerzichnisB\Include\" 
angewendet werden.

Weil du die falschen Trennzeichen verwendest, splittet der Präprozessor 
diesen String falsch (bzw gar nicht).

von C_Benutzer (Gast)


Lesenswert?

Ändere mal #include <headerC.h>
nach #include "headerC.h"
Die Klammer bedeutet das der Compiler in der Standardbibliothek sucht.

von Timmo H. (masterfx)


Lesenswert?

Ja so gehts tatsächlich auch ohne relativen Pfad in headerB . Habe das 
"<" ">" völlig ignoriert

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.