h und c file auslagern

Gast #4615715
Hallo,

ich nutze AVR Studio. Im normalfall hat man ja alle Dateien die zu einem 
Projekt gehören innerhalb des Projektordners.

Nun will ich ein paar c und h Dateien bei anderen Projekten nutzen, 
diese aber nicht immer aktualisieren. Dh. ich würde die Dateien gerne 
zwei Ebenen höhrer verlegen.

Wenn ich z.b. nur eine config.h habe, in der lediglich #define's stehen, 
klappt es mit ../../config.h

Nun will ich aber auch c Dateien mit Funktionen zwei Ebenen höher mit 
dazu gehöriger .h Datei verlagern.

Wenn ich nun in meiner main.c die h Datei include mit ../../funktion.h 
dann sagt er mir "undefined reference to `funktionname'"

Es würde mich sehr freuen, wenn ihr mir sagt, wie das zu machen ist...

Schöne Grüße
Gast #4615734
Ralf G. schrieb:
> 'Include Directories'

Die Fehlermeldung "undefined reference..." hat nun aber nichts mit 
Includes zu tun, sondern kommt vom Linker. Vermutlich hat er einfach 
vergesssen das c-File zum Projekt hinzuzufügen und es damit überhaupt 
nicht kompiliert.
Gast #4615745
Die fehlenden Referenzen kommen daher, dass der linke Typ, die vom 
H-File referierten Funktionen, nicht zur Zieldatei hinzufügen kann.
Die H-Datei kannst Du mittels "langem" Pfad oder fummeln an der Umgebung 
bekanntmachen. Das ist aber nur die halbe Miete.
Du musst sozusagen die, zur H-Datei gehörigen, C-Dateien kompilieren und 
das Ergebnis dem Linker vorsetzen.
Gast #4615877
Ok, ich versuche es mal mit einem Beispiel zu umschreiben.

Ich habe einen DS1632 Temperatur Sensor. Für diesen habe ich eine h und 
eine c datei angelegt. Die h Datei habe ich in der main.c mit #include 
"ds1632.h"

Nun will ich diese beiden Dateien zwei Ebenen darüber ablegen.

Nutze ich unter den Projektoptionen den Include Folder, erhalte ich die 
gleiche Fehlermeldung, wie wenn ich die h Datei durch einen relativen 
Pfad angebe.

guest schrieb:
> Vermutlich hat er einfach
> vergesssen das c-File zum Projekt hinzuzufügen und es damit überhaupt
> nicht kompiliert.

Das habe ich nicht gemacht. Und zwar weil wenn ich dies tue, kopiert das 
Programm mir die Datei aus den "zwei Ebenen oben drüber" ins Projekt. 
Und damit ist der Sinn des ganzen ja wieder verloren...

Gibt es hier eine andere Möglichkeit die Dateien dem Projekt 
hinzuzufügen. Versucht habe ich es über "rechtsklick aufs Projekt ==> 
ADD ==> Existing Item"
(Firma: Schweigstill IT) Persönliche Seite #4615973
AVRe schrieb:
> Und wie ist jetzt die Lösung?

Die Lösung wurde Dir doch schon mehrmals genannt: es reicht nicht aus, 
die Headerdatei einzubinden, sondern es müssen sowohl der betreffende 
C-Quellcode kompiliert als auch das Kompilat zu Deinem Projekt gelinkt 
werden.

Wenn Du die .c-Datei nicht in Deinem Projekt kompilieren willst, kannst 
Du das (natürlich mit entsprechenden kompatiblen 
Compiler-Einstellungen!) auch in einem separaten Projekt machen. Es ist 
halbwegs egal, ob Du dann die .o-Datei linkst oder erst noch eine 
Bibliothek daraus baust.
Gast #4615979
Dann würde die Option "Include Folder" unter den Projekt Optionen keinen 
Sinn machen...

Es muss doch eine Möglichkeit geben, dass das Programm wie gewohnt 
compiliert wird,  nur dass die Dateien nicht im identischen Ordner 
liegen.
Gast #4616007
Ich bin nicht sicher ob ich die Problematik hier wirklich richtig 
verstanden habe. Ich nutze aber selbst sehr wohl .h und .c in einem 
"Common"-Verzeichnis. Das ganze mit ATMEL Studio 7.

Header werden per Include-Directory in den Einstellunge aufgelöst.

Bei den .c Files gibt es die Möglicheit Dateien als Link hinzuzufügen. 
Beim Hinzufügen von vorhandenen Dateien hat der Button "Hinzufügen" in 
der Dateiauswahl einen kleinen Pfeil hinter dem sich das "Als Link 
hinzufügen" verbirgt. Diese Lösung gefällt mir ganz gut.
Gast #4616108
AVRe schrieb:
> Es muss doch eine Möglichkeit geben, dass das Programm wie gewohnt
> compiliert wird,  nur dass die Dateien nicht im identischen Ordner
> liegen.

ganz einfach, mach aus der "c"-Datei eine "h"-Datei, dann wird sie mit 
einfachem #include als Bestandteil der main.c compiliert.
Gast #4616190
Cube_S schrieb:
> Ich bin nicht sicher ob ich die Problematik hier wirklich richtig
> verstanden habe. Ich nutze aber selbst sehr wohl .h und .c in einem
> "Common"-Verzeichnis. Das ganze mit ATMEL Studio 7.
>
> Header werden per Include-Directory in den Einstellunge aufgelöst.
>
> Bei den .c Files gibt es die Möglicheit Dateien als Link hinzuzufügen.
> Beim Hinzufügen von vorhandenen Dateien hat der Button "Hinzufügen" in
> der Dateiauswahl einen kleinen Pfeil hinter dem sich das "Als Link
> hinzufügen" verbirgt. Diese Lösung gefällt mir ganz gut.

OK, dass is schonmal sehr gut. Soweit klappts danke!

Nun habe ich aber einen c file, der einen h file einbindet, welcher im 
aktuellen Projekt liegt also im Projektordner.

dafür müsste ich den Pfad genau angeben also
"eins hoch" dann in den Projektordner
#include "../Projektordner/Files/file.h"

Wenn ich den Pfad angebe, klappts. Das Problem ist, ich müsste es immer 
wieder für jedes Projekt ändern. Gibt es hierfür einen Platzhalter, der 
so heißt wie der Projektordner? Sprich dass ich den pfad so ca angeben 
würde:

#include "../$(Projektfolder)/Files/file.h"
Gast #4616233
>Nun habe ich aber einen c file, der einen h file einbindet, welcher im
>aktuellen Projekt liegt also im Projektordner.

Löse ich auch über die Include-Directories. Da gibt's zusätzlich ein 
".."

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.