Forum: Mikrocontroller und Digitale Elektronik AVR Studio4: header wird nicht erkannt?


von user (Gast)


Lesenswert?

Hallo,
ich habe das AVR Studio 4 und möchte mein Projekt aufteilen und habe 
dazu eine Header Datei angelegt unter: Header Files

über #include "my_header.h" habe ich diesen eingefügt.

Leider wird dieser aber anscheinend nicht erkannt...

Ich habe gelesen das ich im Toolchain, bei mir WinAVR, noch das 
Verzeichnis angeben muss, indem der header liegt.

Leider finde ich dazu im Studio 4 keine Einstellungsmöglichkeiten.

Wo muss ich suchen?

von Karl H. (kbuchegg)


Lesenswert?

user schrieb:
> Hallo,
> ich habe das AVR Studio 4 und möchte mein Projekt aufteilen und habe
> dazu eine Header Datei angelegt unter: Header Files
>
> über #include "my_header.h" habe ich diesen eingefügt.

Wenn du es so angibst, dann wird das entsprechende File nur am selben 
Verzeichnis gesucht, an dem auch das File sich befindet, aus dem heruas 
der #include gemacht wird.
Bzw. wenn es so nicht zu finden ist, dann werden die eingestellten 
Directories abgesucht.

> Ich habe gelesen das ich im Toolchain, bei mir WinAVR, noch das
> Verzeichnis angeben muss, indem der header liegt.

Kann man machen. Du kannst aber auch den im #include den Pfad zur Header 
Datei angeben.

> Leider finde ich dazu im Studio 4 keine Einstellungsmöglichkeiten.
>
> Wo muss ich suchen?

Fangfrage?
Menü 'Project'
Menüpunkt 'Configuration Options'
Im Dialog dann den Reiter 'Include Directories'

von user (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Kann man machen. Du kannst aber auch den im #include den Pfad zur Header
> Datei angeben.

Das hört sich gut an. Sieht das dann in etwa folgendermaßen aus:

#include "C:\Users\...\...\Programm"


Karl Heinz Buchegger schrieb:
> Fangfrage?
> Menü 'Project'
> Menüpunkt 'Configuration Options'
> Im Dialog dann den Reiter 'Include Directories'

genau das habe ich versucht - leider erfolglos !?
Ich geb da den kompletten Pfad an in welchem die header liegt und
AVR Studio macht ein ".\" draus.

von user (Gast)


Angehängte Dateien:

Lesenswert?

beide varianten funktionieren nicht :(

von Karl H. (kbuchegg)


Lesenswert?

user schrieb:

> Das hört sich gut an. Sieht das dann in etwa folgendermaßen aus:
>
> #include "C:\Users\...\...\Programm"

Zum Beispiel  (ich geh mal davon aus, dass die ... Punkte ein 
Pausenfüller sind)

PS: Es ist nicht sehr schlau, das alles in den 'User Pfad' von Windows 
einzulagern. Dieses 'Benutzer'-Verzeichnis ist für Buchhalter und 
Sekretärinnen super. Auch für Manager, die ohne Umlaute und 
Sonderzeichen in den Pfadnamen ihre Power-Point Präsentationen nicht 
mehr wiederfinden.
Aber wir sind Softwareentwickler. Wir haben kein Problem damit, wenn es 
auf C:, auf der Root, ein Verzeichnis 'Projekte' gibt, unter dem unsere 
ganzen Softwareprojekte liegen und bei dem es zb ein 'Common' 
Verzeichnis gibt. Und wir haben auch kein Problem damit, auf Umlaute, 
die meisten Sonderzeichen und vor allen Dingen Leerzeichen in Pfadnamen 
zu verzichten. Wir haben deswegen kein Problem damit, weil wir wissen, 
dass es damit immer wieder mal Probleme gibt, wenn der Hersteller 
unserer Tools nicht aufgepasst hat. Und so wichtig sind uns diese Dinge 
nicht, als das wir darauf bestehen würden.


> Ich geb da den kompletten Pfad an in welchem die header liegt und
> AVR Studio macht ein ".\" draus.

Oops. Das ist wohl ein Bug im Studio.
Sorry, aber ich benutze diese Variante fast nie.
Ich gebe den relativen Pfad zu meinem Common Verzeichnis direkt im 
#include an.

von Karl H. (kbuchegg)


Lesenswert?

user schrieb:
> beide varianten funktionieren nicht :(

Ja, habs gerade gesehen.
Wie gesagt: ich geb normalerweise den relativen Pfad im #include an.

von xfr (Gast)


Lesenswert?

In welchem Ordner liegt denn "my_header.h"? Genau den musst Du als 
Include-Verzeichnis angeben, nicht das übergeordnete Projektverzeichnis.

Dass aus dem kompletten Pfad ein ".\" wird, liegt daran, dass AVR Studio 
für Dich mitdenkt und aus dem im GUI gewählten Ordner einen relativen 
Pfad macht. Sonst würde das Projekt nur noch auf Deinem PC bzw. in genau 
dem absoluten Ordner funktionieren und nirgends anders.

von user (Gast)


Lesenswert?

nun habe ich das Projekt neu angelegt

F:\Projekt\
Ordner_1: my_header.h und main.c drin
Ordner_2: gebe ich als Zielverzeichnis des Projektes an

>> Leeres Projekt

>> Source Files: Add Existing Source Files > main.c
>> Header Files: Add Existing Header Files > my_header.h

>> zum vorhandenen main Code gebe ich anfangs ein:
   #include "F:\Projekt\Ordner_1"

>> fatal error: F:\Projekt\Ordner_1: No such file or directory

von user (Gast)


Lesenswert?

was auch komisch ist:

die header und main habe ich vorher in einem anderen Projekt 
programmiert welches läuft.

Da sind Header und Main auch bereits aufgeteilt auf Header Files und 
Source Files, ohne das irgend ein Directory angegeben war.

Ich hab die beiden Dateien main.c und my_header.h einfach kopiert und 
möchte diese nun in ein neues Projekt einfügen um damit weiter zu 
arbeiten.

von xfr (Gast)


Lesenswert?

Und wenn Du jetzt Ordner_1 per GUI zu den Include-Directories einfügst, 
was passiert dann?

Es müsste dann eigentlich eins von beiden rauskommen:
"./Ordner_1"
oder
"../Ordner_1"

In main.c muss nur stehen:
1
#include "my_header.h"

Wenn das wirklich nicht gehen sollte, probier:
1
#include "Ordner_1/my_header.h"
oder
1
#include "../Ordner_1/my_header.h"

Aber vergiss die absoluten Pfade, vor allem in den Source-Dateien. Die 
willst Du da nicht drinnen haben.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

user schrieb:
> Leider wird dieser aber anscheinend nicht erkannt...

Und woran machst Du das fest?

Wenn der Präprozessor die Headerdatei nicht öffnen kann, gibt es eine 
eindeutige Fehlermeldung.

Gibt es die bei Dir oder funktioniert nur irgendwas anderes nicht, aus 
dem Du schließt, daß die Headerdatei "nicht erkannt" wird?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

user schrieb:
> nun habe ich das Projekt neu angelegt
>
> F:\Projekt\
> Ordner_1: my_header.h und main.c drin

main.c und my_header.h liegen in demselben Verzeichnis?
Dann sollte ein

#include "my_header.h"

reichen.

> Ordner_2: gebe ich als Zielverzeichnis des Projektes an

Warum nimmst Du nicht denselben Ordner? Das verkompliziert doch nur 
alles.

>    #include "F:\Projekt\Ordner_1"

Backslashes in C??? Gibt es nicht. Wenn doch, sind sie lediglich eine 
propriertäre Erweiterung desjenigen Compilers.

Ausserdem kannst Du keine Ordner "includen", nur Dateien!

Wenn schon, dann:

   #include "F:/Projekt/Ordner_1/my_header.h"

Also mit Slashes, nicht mit Backslashes. C hat erstmal nichts mit den 
Trennern eines Windows-Dateisystems zu tun, schließlich wurde C auch 
nicht auf/für Windows entwickelt.

Aber wie gesagt: Da main.c und my_header.h in demselben Verzeichnis 
liegen, sollte ein

#include "my_header.h"

reichen.

Liegen C-Source und Includes nicht in demselben Verzeichnis, dann gibt 
man den Pfad zur Include-Datei relativ an, z.B.

#include "../include/my_header.h"


Wenn nicht, liegt das an Deiner unsinnigen abweichenden Angabe des 
Zielordners.

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.