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?
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'
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.
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.
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.
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
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.
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.
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?
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.