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?
Das Einfachste wäre wohl zwei Workspaces anzulegen.
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.
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.
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
So einfach isses dann wohl doch nicht...
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?
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.
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.
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? :)
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.
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...
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.
@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.
@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...
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,
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.