Forum: PC-Programmierung Eclipse Indexer mit Build Configuration in Einklang bringen


von Hansbär (Gast)


Lesenswert?

Hi,

ich habe ein Problem mit Eclipse´s Indexer und das sieht so aus.

Ich habe ein Workspace geöffnet in dem es mehrere Projekte gibt zwischen 
denen ich umschalten möchte. Zwei dieser Projekte beinhalten einen 
Header mit dem Namen Header.h. In diesen Header ist zwei mal ein Struct 
definiert mit dem gleichen Namen, aber unterschiedlichen Membern. Diese 
Projekte sind allerdings losgelöst voneinander, daher auch die gleichen 
Namen. Ich habe mir jetzt mehrere Konfigurationen erstellt, um alle 
Projekte in Eclipse kompilieren zu können. Um den Indexer nicht durch 
die beiden gleichen Strukturen durcheinander bringen zu wollen, habe ich 
alles was nicht zum jeweiligen Projekt gehört vom Build ausgeschlossen. 
Das mache ich unter Properties/C++ Build/Exclude resource from build.

Das dumme ist, der Indexer parst das File trotzdem und meldet mir nun 
Fehler weil er den Code nicht aulösen kann. Code Completition 
funktioniert dann natürlich auch nicht.

Den Indexer auschalten geht nicht, weil dann Code Completition nicht 
funktioniert und für mich zwingend erforderlich ist. Den Namen der 
Strukturen anzupassen geht auch nicht.

Lange Rede kurzer Sinn: Kann man den Indexer so einstellen, dass er nur 
alles parst was zum Build gehört?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Das Einfachste wäre wohl zwei Workspaces anzulegen.

von Hansbär (Gast)


Lesenswert?

Die Projekte liegen aber unter einem Verzeichnis. Soweit ich weiß kann 
man in Eclipse keine c-files auswählen und ins Projekt aufnehmen. Man 
kann nur komplette Verzeichnisse aufnehmen. Das Problem ist, dass alle 
Projekte die gleichen Treiber verwenden.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Dann erzähl mal wie genau deine Struktur aussieht, Projekte sind != 
Dateien und ein Projekt kann in mehreren Verzeichnissen liegen, zudem 
kann man auch externe Dateien/Ordner verlinken.

von Hansbär (Gast)


Lesenswert?

Die Struktur sieht so aus:

Hauptordner
  Projekt 1
    Controller 1 \_______ Beide haben Header.h mit gleichem Structnamen
    Controller 2 /
  Projekt 2
    Controller 1 \_______ Beide haben Header.h mit gleichem Structnamen
    Controller 2 /
  Projekt 3
    Controller 1 \_______ Beide haben Header.h mit gleichem Structnamen
    Controller 2 /
  Projekt 4
    Controller 1 \_______ Beide haben Header.h mit gleichem Structnamen
    Controller 2 /
  Treiber

von Hansbär (Gast)


Lesenswert?

So einfach isses dann wohl doch nicht...

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Deine Struktur wiederspricht aber der Aussage:

Hansbär schrieb:
> Diese Projekte sind allerdings losgelöst voneinander

Sieht mir ehr so aus als sei da garnichts losgelöst, wieso machst du 
nicht alles für Controller 1 in einem WS (mit eigenem Projekt) und alles 
für Controller 2 in einem anderem WS?

von Hansbär (Gast)


Lesenswert?

Läubi .. schrieb:
> Sieht mir ehr so aus als sei da garnichts losgelöst, wieso machst du
> nicht alles für Controller 1 in einem WS (mit eigenem Projekt) und alles
> für Controller 2 in einem anderem WS?

Das würde ich gerne... aber wie?

Wenn ich als Workspace Projekt 1 auswähle, dann fehlen mir die Treiber. 
Wenn ich die Treiber über die Importfunktion reinhole, dann kopiert er 
mir lediglich die Treiber ins Projekt 1.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Also, der "Workspace" ist erstmal nur eine Sammlung von 
Projektreferenzen.

Sind Controller 1 / Controller 2 etc... überhaupt shcon einzelne 
Eclipseprojekte?

Wenn ja:
Leg dir also einen neuen WS an (Über File->Switch Workspace), dan 
import->existing project into Workspace und dann z.B.
Projekt 1 -> Controller 1

Falls das nicht so ist müßtest du das erstmal soweit bringen.

von Hansbär (Gast)


Lesenswert?

Ne, das sind noch keine Eclipse Projekte. Daran hängt es ja.
Ich kenn das von anderen Programmen so: Workspace erstellen. Im 
Workspace erstelle ich ein Projekt und diesem Projekt weise ich 
Sourcefiles zu.

Ich habe aber nur einen Workspace in dem X Projekte liegen!

Das geht ja bei Eclipse nicht. Ich kann nur einen Workspace erstellen 
und mehrere Projekte. Wenn ich den Projekten aber Sourcefiles zuweisen 
will, kann ich das nicht individuell sondern ich muss ein Ordner angeben 
wo alles drin liegt. Das geht ja bei mir nicht...

Oder reden wir gerade aneinander vorbei? :)

von Wurstbrot (Gast)


Lesenswert?

Also wenn Sourcen von verschiedenen Projekten genutzt werden sollen, 
dann erstellt man für gewöhnlich eine Bibliothek und bindet die dann in 
die Projekte ein.

Soll heißen:
Treiber ist ein eigenständiges Projekt aus dem dann eine Bibliothek 
(.lib, .dll, .a, .so oder was auch immmer) generiert wird.
Bei deinen einzelnen Projekten gibst du dann einfach an, dass diese mit 
der Treiber-Bibliothek gelinked werden sollen.

Die gleichen Source Dateien in mehreren Projekten verwenden zu wollen 
ist irgendwie Murks.

von Hansbär (Gast)


Lesenswert?

Ich wüsste nicht was daran Murks ist? Die gleiche Lib würde ich auch 
immer wieder in verschiedenen Projekten verwenden. Das ist für mich das 
gleiche...

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Hansbär schrieb:
> Ich kenn das von anderen Programmen so: Workspace erstellen

So ist es auch bei Eclipse, der Workspace ist hier aber nur ein Ordner 
in dem ein paar Metainformationen gespeichert werden, und welche als 
Defaultlocation für neue Projekte gilt.
Du kannst aber beliebige Projekte von irgendwoher importieren. Diese 
werden nicht kopiert, sondern nur ein Verweis in den Metainformationen 
hinterlegt.

Du kannst nun beliebig viele Workspaces anlegen mit unterschiedlichsten 
Einstellungen und Projekten.

Hansbär schrieb:
> Im Workspace erstelle ich ein Projekt
Ein Projekt hat wie oben geschrieben nichts mit dem Konkretem 
Workspace zu tun und ist davon unabhängig.
Jedes Projekt ist wiederum ein Ordner in dem Metainformationen in form 
einer .project Datei (und noch ein paar mehr je nach verwendeten 
Plugins) rumliegen, und wo (in den meisten Fällen) auch die Sourcefiles 
liegen.

Hansbär schrieb:
> und diesem Projekt weise ich Sourcefiles zu
Kann man machen, i.A. ist aber Projekt und Sourcefilelocation das selbe. 
Wenn nichts dagegenspricht sollte man das so machen.
Bei bestehenden kann man einfach beim anlegen eines Projektes den 
bestehenden Ordner angeben und Eclipse legt dann dort ein Projekt an 
(mit den dort vorhandenen Dateien) oder man legt ein unabhäniges Projekt 
an und kopiert einmalig die Dateien.

Du müsstest jetzt also folgende Projekte anlegen 
(Ordner-->Beispielhafter Projektname):
1
Projekt 1\Controller 1 --> Prj1Ctr1
2
Projekt 1\Controller 2 --> Prj1Ctr2
3
Projekt 2\Controller 1 --> Prj2Ctr1
4
Projekt 2\Controller 2 --> Prj2Ctr2
5
Projekt 3\Controller 1 --> Prj3Ctr1
6
...
7
Treiber --> Treiber

Dann erstellst du dir zwei Workspaces WS1 und WS2.
Dort importierst du (über import existing Projekt)
1
WS1:
2
---------------
3
 Prj1Ctr1
4
 Prj2Ctr1
5
 Prj3Ctr1
6
 ...
7
 TreiberWS2:
8
---------------
9
 Prj1Ctr2
10
 Prj2Ctr2
11
 Prj3Ctr2
12
 ...
13
 Treiber

Je nachdem ob du für Ctr1 oder Ctr2 arbeiten willst musst du dann 
nurnoch den Workspace wechseln.

von Wurstbrot (Gast)


Lesenswert?

@Hansbär:

> Ich wüsste nicht was daran Murks ist? Die gleiche Lib würde ich auch immer 
wieder in verschiedenen Projekten verwenden. Das ist für mich das gleiche...

Das gleiche ist es schon deswegen nicht, weil Bibliotheken über den 
Linker eingebunden werden während die Source Dateien erst jedesmal durch 
den Compiler wandern. Das mag bei einer Source Datei noch nicht die 
großen Unterschied machen, aber bei größeren Projekten überlegt man sich 
das zweimal.

Man kann glaube ich aber auch in Eclipse einzelne "virtuelle" Dateien in 
ein Projekt einfügen - nicht nur Ordner. Ist aber schon eine Weile her, 
dass ich das probiert habe. Siehe: 
http://help.eclipse.org/helios/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2Ftasks%2Ftasks-45.htm

Die sauberere Lösung wäre meiner Meinung nach aber, den Treiber als 
Bibliothek bereitzustellen.

von Hansbär (Gast)


Lesenswert?

@Läubi:

Wenn ich dich richtig verstanden habe, dann habe ich das schon so 
probiert. Ich habe einen Workspace erstellt: Test Eclipse. Darin habe 
ich ein Leeres Projekt angelegt: Projekt 1. Dann habe ich über 
Import/File System die Ordner angegeben die ich im Projekt haben möchte 
und habe sie unter Advanced mit Create Links in Workspace und den beiden 
Haken darunter importiert. Fazit: Der Index kann nun gar nichts mehr 
lesen...

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Nein, das Projekt in dem Ordner wo auch die Dateien liegen anlegen. Das 
mit dem verlinken von Resourcen geht zwar prinzipiell, aber Eclipse 
(bzw. das CDT Plugin) kann damit wie du bemerkt hast nicht so recht was 
anfangen,

von Hansbär (Gast)


Lesenswert?

Das geht ja aber nicht, da ich ja in Projekt1 mein Eclipseprojekt 
anlegen müsste. Wenn ich das mache, dann habe ich die Treiber nicht 
dabei. Das heißt ich müsste meine Ordnerstruktur nun ändern, was ich 
aber nicht möchte da in unserer Versionsverwaltung schon alles 
eingepflegt ist.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Hansbär schrieb:
> Das heißt ich müsste meine Ordnerstruktur nun ändern

Wieso? Du kannst doch die bestehende Ordnerstruktur übernehmen, du hast 
dann halt einfach mehr als ein Projekt und die Treiber werden als 
Bibliothek eingebunden...

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.