Forum: Compiler & IDEs Eclipse add existing c-file to existing project??


von Holm T. (Gast)


Lesenswert?

Ich spiele gerade ein Bisschen mit Eclipse herum, im Wesentlichen um
einem Freund die Sache über zu helfen...ich selbst werde bei make & 
friends bleiben :-)

Ich habe hier Eclipse Neon und das avr-plugin über von Soureforge 
installiert.

Ich habe jetzt mal ein avr-c Projekt kreiert und möchte nun zu diesem 
Projekt existierende C-Quellen hinzufügen (hier Uart Code). Ich möchte 
also nicht ein Projekt aus einem existierenden Make-Projekt importieren, 
sondern nur woanders liegende C Quellen und Header hinzufügen 
(kopieren). Wie geht das?


Gruß,

Holm

von hp-freund (Gast)


Lesenswert?

Moin,
einfach die Dateien hinein kopieren. Wenn Du vorhandene inc und src 
Verzeichnisse nimmst, nur noch ein "Index -> Rebuild" und es sucht sich 
alles selbst zusammen wenn es das Make verwaltet.
Bei einem neuen inc Verzeichnis musst Du das in die includes anpassen.

Sollte etwas nicht gefunden werden, schaue ob Datei oder Verzeichnis auf 
"exclude from build" gesetzt sind.

Wenn Du ein Makefile vorgegeben hast, alles wie gehabt.

Bei make & friends bleibst Du ja auch, nur automatisch und vor allem -
mit Textvervollständigung.

Ein Aufruf von make von der Konsole ist weiterhin möglich.

von Holm (Gast)


Lesenswert?

hp-freund schrieb:
> Moin,
> einfach die Dateien hinein kopieren.

Hmm...das kanns ja eigentlich nicht sein.

Üblicherweise arbeite ich mit dem vi, da geht das ja noch (:r 
blafasel.c)
aber hier hat das wohl extern zu erfolgen oder per copy&paste .. bei 
längeren Files wohl eher ätzend.

Kennt der Eclipse-interne C/C++ Editor so ein Insert from File ?

Selbst das AVR-Studio 4 hatte so ein Kommando "add existing 
source/header File to the project".

Ich habeversucht entspechende Dateien in den Projektordner zu kopieren 
und dann entsprechende Files erzeugt..da werden die Dateien einfach 
überbügelt..so hatte ich mir das auch gedacht.


Make hin oder her..ich arbeite mit FreeBSD und BSD make ist was Anderes 
als GNU-Make..ich vermute das da die nächsten Probleme zu erwarten 
währen..

Ich will aber Jemandem der bisher nur unter Windows mit Bascom 
gearbeitet hat beibringen wie er unter Linux/Unix klar kommt. Wenn ich 
aber schon bei den ersten 3 "Takten" auf seltsame Probleme stoße finde 
ich das nicht ansatzweise putzig....

Gruß,

Holm

von hp-freund (Gast)


Lesenswert?

Da gibt es wohl noch Unklarheiten.

Ich meinte Du kannst einzelne Dateien oder auch Verzeichnisse dem 
Projekt hinzu fügen.

Nehmen wir an Du hast ein Verzeichnis "meine_libs" mit den 
Unterverzeichnissen "inc" und "src".

Dann kannst Du natürlich "meine_libs" komplett in das Projekt kopieren 
oder auch den link darauf.

Unter "File -> Import" gibt es noch mehr Möglichkeiten.

von dummy (Gast)


Lesenswert?

>aber hier hat das wohl extern zu erfolgen oder per copy&paste .. bei
>längeren Files wohl eher ätzend.

Einfacher geht es doch nun wirklich nicht mehr.
Gedankensteuerung kann Eclipse noch nicht.

von hp-freund (Gast)


Lesenswert?

Noch vergessen: Du kannst sogar ein Bibliothek Projekt als Referenz 
Projekt angeben.

von Holm T. (Gast)


Lesenswert?

hp-freund schrieb:
> Da gibt es wohl noch Unklarheiten.
>
> Ich meinte Du kannst einzelne Dateien oder auch Verzeichnisse dem
> Projekt hinzu fügen.
>
> Nehmen wir an Du hast ein Verzeichnis "meine_libs" mit den
> Unterverzeichnissen "inc" und "src".
>
> Dann kannst Du natürlich "meine_libs" komplett in das Projekt kopieren
> oder auch den link darauf.
>
> Unter "File -> Import" gibt es noch mehr Möglichkeiten.

Ich habe es nicht mit Subdirectories versucht, sondern mit einzelnen 
Files und der Menüpunkt "File -> Import" gliedert sich unter "General" 
in "Archive File" mit Kompressionssymbol, in "Existing Projects into 
Workspace", "File System", "Preferences" und "Projects from Folder or 
Archive".
Nichts davon paßt.
Unter "C/C++" gibts "C/C++ Project Settings" und "Projects from Folder 
or Archive"...nix paßt.
Ich möchte zu einem Projekt ein existierndes File hinzufügen...

>Noch vergessen: Du kannst sogar ein Bibliothek Projekt als Referenz  Projekt 
angeben.

..und was genau tut das?



@dummy:

"Einfacher geht es doch nun wirklich nicht mehr.
Gedankensteuerung kann Eclipse noch nicht."

Du machst scheinbar Deinem Namen alle Ehre?

Bei ein paar Hundert Zeilen wird das zeitraubend und nervig. Ich hatte 
oben schon angedeutet das es diesen (an und für sich 
selbstverständlichen) Menüpunkt selbst im alten AVR Studio gibt. Also 
bitte...etwas weniger dümmlich, ja?

Gruß,

Holm

von Johannes S. (Gast)


Lesenswert?

Man kann die Dateien einfach per Drag 'n Drop in das Eclipse Projekt 
werfen.

von hp-freund (Gast)


Lesenswert?

Holm T. schrieb:
> Bei ein paar Hundert Zeilen wird das zeitraubend und nervig.

Das verstehe ich jetzt auch nicht mehr.

Wenn Du einfach eine z.B. serial.c und serial.h hast, kannst Du die im 
Projekt in die Verzeichnisse src und inc einfügen bzw. mit Drag and Drop 
rein ziehen. Oder was meinst Du mit "existierende C-Quellen hinzufügen"?

Holm T. schrieb:
> Bibliothek Projekt als Referenz  Projekt
> angeben.
>
> ..und was genau tut das?

Nehmen wir an, all deine gesammelten Werke möchtest Du in einer mylib.a 
zusammen fassen, dann kannst Du eine library Projekt erstellen das dies 
übernimmt und dann dieses als Referenz angeben.
Dann wird bei der Änderung am library Projekt auch für das executable 
Projekt immer die aktuelle Version deiner Lib Dateien verwendet.

von Johannes S. (Gast)


Lesenswert?

hp-freund schrieb:
> Holm T. schrieb:
>> Bei ein paar Hundert Zeilen wird das zeitraubend und nervig.
>
> Das verstehe ich jetzt auch nicht mehr.

ich hoffe er meinte nicht die Dateien neu zu erzeugen und die Inhalte 
per copy & paste zu übertragen?

von Holm T. (Gast)


Lesenswert?

Ok, mit der Drag&drop Geschichte muß ich mal experimentieren, ich nehme 
X11 im Wesentlichen als Terminalmultiplexer und operiere mit 
filemanagern etc kaum mal herum..ich werde das untersuchen.
anderes Problem:

Die von mir verwendete rfm12 Bibliothek von "Das Labor" benutzt aus 
meiner Sicht ein Unart wie diese hier:

rfm12.c:
/*
 * include extra features here
 * all of the stuff in there is optional, so there's no code-bloat..
*/
#include "include/rfm12_extra.c"

Wobei das dieses enthaltende File rfm12.c in einem Diretory src neben 
include liegt.
Eclipse hat sich die Directorystruktur angeguckt und ist der Meinung das 
es eine gute Idee wäre erst mal in include das File rfm12_extra.c in ein 
Objekt zu übersetzen..was schief geht, weil in rfm12.c header reingeholt 
werden die rfm12_extra.c benötigt.
Wie erkläre ich Eclipse das es die Finger von rfm12_extra.c lassen und 
nur dessen Code beim Übersetzen von rfm12.c mit dem Präprozessor 
reinholen soll?

Ich halte diese Struktur für doof, eine Library funktioniert aus meiner 
Sicht anders, hier aber gibt es einen three mit sourcen der nur über 
includes hereingholt wird..und das Ganze wird dann Library 
genannt...nicht meine Idee.

Edit: Drag&Drop funktioniert so nicht.

Gruß,

Holm

von hp-freund (Gast)


Lesenswert?

Na ja, include von .c Datei...

Aber gut, geh auf die .c mit der rechten Maustaste
 -> Properties -> C/C++ Build -> Exclude resource from build
dann wird diese ignoriert.

von Holm T. (Gast)


Lesenswert?

Johannes S. schrieb:
> hp-freund schrieb:
>> Holm T. schrieb:
>>> Bei ein paar Hundert Zeilen wird das zeitraubend und nervig.
>>
>> Das verstehe ich jetzt auch nicht mehr.
>
> ich hoffe er meinte nicht die Dateien neu zu erzeugen und die Inhalte
> per copy & paste zu übertragen?

Doch, meinte Er.

Also noch mal:

Ich mache ein neues C Projekt mit einer Datei main.c und einer main.h.

In einem anderen nicht Eclipse Projekt liegen 2 Dateien uart.h und 
uart.c und diese möchte ich nun nachträglich dem Projekt main 
hinzufügen, weil ich plötzlich eine Uart für Debugging Ausgaben brauche.

Eclipse hat das uart Directory nicht unterhalb seines Projektordners, 
also erzählt mal bitte einem Doofen wie genau man die da "hineinzieht" 
ohne die Files neu zu erzeugen (mit Eclipse) und den Inhalt da rein zu 
kopieren.

Gruß,

Holm

von hp-freund (Gast)


Lesenswert?

uart.h mit zu main.h ins Verzeichnis
uart.c mit zu main.c ins Verzeichnis

falls alle in einem Verzeichnis liegen, einfach die beiden dazu.

von Holm T. (Gast)


Lesenswert?

Ja, das verstehe ich unter drag&drop.. aber eclipse sieht kein uart.c 
und uart.h das ich draggen könnte, da es innerhalb des Eclipse 
Workspaces kein Directory gibt das diese Files enthält.

Gruß,

Holm

von Holm T. (Gast)


Lesenswert?

hp-freund schrieb:
> Na ja, include von .c Datei...

..ja eben. Die Header funktionieren aber genau so komisch...
>
> Aber gut, geh auf die .c mit der rechten Maustaste
>  -> Properties -> C/C++ Build -> Exclude resource from build
> dann wird diese ignoriert.

Danke, ich probiere es aus.

Gruß,

Holm

von hp-freund (Gast)


Lesenswert?

Holm T. schrieb:
> da es innerhalb des Eclipse

Sind ja auch noch nicht drin. Zieh sie über einen Dateimanager rein.

Ausser Du hast sie schon ausserhalb eclipse rein kopiert, dann mit F5 
Ansicht aktualisieren.

von Holm T. (Gast)


Lesenswert?

hp-freund schrieb:
> Holm T. schrieb:
>> da es innerhalb des Eclipse
>
> Sind ja auch noch nicht drin. Zieh sie über einen Dateimanager rein.

..eben das hat nicht funktioniert...das zieht sich wieder zurück :-)
Dateimanager ist hier dieses mate-ding, kann mir nicht merken wie das 
heißt.
Machst Du das unter Windows?

>
> Ausser Du hast sie schon ausserhalb eclipse rein kopiert, dann mit F5
> Ansicht aktualisieren.

Mal sehen.
Neuigkeit dazwischen: Ich habs geschafft ein Binary zu erzeugen, echt ne 
schwere Geburt..mit klick-war-games... (wobei das natürlich an zum 
großen Teil an dieser "Bibliotheksstruktur" liegt....)

Gruß,

Holm

von Pete K. (pete77)


Lesenswert?

File->Import->FileSystem

dann Directory aussuchen, anwählen und die Dateien kopieren, die man im 
Projekt haben möchte.

von hp-freund (Gast)


Lesenswert?

Holm T. schrieb:
> Machst Du das unter Windows?

Nein. Linux.

Holm T. schrieb:
> das zieht sich wieder zurück

Rechte? Nicht getroffen?

Holm T. schrieb:
> wobei das natürlich an zum
> großen Teil an dieser "Bibliotheksstruktur" liegt....

Wird es sein. Normalerweise kein grosses Ding.

von Holm T. (Gast)


Lesenswert?

Pete K. schrieb:
> File->Import->FileSystem
>
> dann Directory aussuchen, anwählen und die Dateien kopieren, die man im
> Projekt haben möchte.

Danke Pete!

Genau das ist es was ich von Anfang an wissen wollte..allerdings kauft 
Eclipse auch scheinbar irgendwie aufgefundene Files auf...

Mir fehlt da noch die Übung.
Drag & Drop funktioniert auch ..wenn man es auf den Projektnamen fallen 
läßt... :-)


Ich habe das Kompilat nun auch auf eine Hardware "geavrduded" und 
freundlicherweise verhält sich das genaus wie das mit make program 
erzeugte Ergebnis :-)

Ein Problem hatte ich dabei aber noch: Die AVRdude Mimik wollte 
unbedingt ein $Prokectname.hex an avrdude übergeben..was nicht 
existierte, es gab aber .elf file dasdieser eignetlich auch begreifen 
müßte.
Ich habe irgendwann die Radiobuttons zum erzeugen des hex files für 
eerpom und flash gefunden, damit ging auch das programmieren..aber ich 
habe nicht gefunden wo man die avrdudemimik auf .elf umstellt..dabei bin 
ich die Dialoge mehrfach durch. Tomaten auf den Augen?

Gruß,

Holm

von Johannes S. (Gast)


Lesenswert?

Holm T. schrieb:
> Ein Problem hatte ich dabei aber noch: Die AVRdude Mimik wollte
> unbedingt ein $Prokectname.hex an avrdude übergeben..was nicht
> existierte

das .hex kann man auch im make oder post-build step mit 'objcopy' und 
den passenden Parametern erstellen lassen.

von Holm T. (Gast)


Lesenswert?

Ja,, das habe ich ja im Endeffekt mit den beiden Radiobuttons (Flash und 
EEPROM Hexfile generieren) getan..die Frage ist andersrum..wie stelle 
ich an der AVRdude Mimik ein das dort kein .hex erwartet wird?

Aus dem avrdude Manual:

"Provided libelf(3) was present when compiling avrdude, the input file 
can
 also be the final ELF file as produced by the linker.  The appropriate
 ELF section(s) will be examined, according to the memory area to write
 to."

Ergo müßte auch .elf gehen und der avrdude sammelt sich die 
interessanten Sections selbst raus...aber wo wird das script für den 
avrdude entsprechend generiert? Ich würde ggf. es gerne anpassen..

Gruß,

Holm

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.