Eclipse CDT nicht Bauvorhabens auf header-Datei ändern
Habe ich Plattform Eclipse 3.7.2 und CDT 8.0.2.
Wenn ich will, zu tun, 'Build All' Header von anderen Arbeitsbereich Projekte werden nicht gezählt als Abhängigkeiten, und nichts ist neu aufgebaut.
Habe ich eine hello world-Anwendung und eine statische Bibliothek-Projekt.
Die statische Bibliothek als Verweis im Projekt-Eigenschaften -> c/c++ general -> Pfade und Symbole -> Registerkarte Verweise -> aktiviert 'Aktiv'. Das ist die einzige Einstellung die ich geändert habe.
Durch die Art und Weise, Es ist völlig mich schlägt, warum Eclipse verfügt über einen zusätzlichen "Projekt-Verweise" top-level-Element unter Projekt Eigenschaften.
Sowieso, ich habe versucht, sowohl die Externen generator (wird standardmäßig ausgewählt, auf der Projekt-Erstellung) und der Interne generator, auch gepaart mit Kombinationen von der globalen Einstellung " Einstellungen -> c++ -> Erstellen -> Build-Konfigurationen nur, wenn der Eclipse-Ressource änderungen........'
Vielen Dank für alle Gedanken dazu auf.
Update:
Dies ist die Ausgabe der Konsole beim Bau abhängigen Projekt Projekt2 (Proj1 ist die lib).
'make all aufgerufen wird, sondern es lediglich re-links, ist es nicht neu kompilieren Main.cpp wie es sein sollte.
Jedermann heraus dort vertraut mit eclipse generierten makefiles? Nochmals vielen Dank.
**** Build of configuration Debug for project Proj2 ****
make all
Building target: Proj2
Invoking: Cross G++ Linker
g++ -L"/home/user/.eclipse-workspace/Proj1/Debug" -o "Proj2" ./Main.o -lProj1
Finished building target: Proj2
**** Build Finished ****
Edit: Dies ist 1,5 Jahre alt, wollte noch hinzufügen, dass ein Fehler in Eclipse eingereicht worden wäre für dies:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=375800
- Ich sehe die gleiche Sache mit einer neueren version von eclipse/CDT. Als nahe als ich kann sagen, der build ist zu generieren .d-Headerdatei-Abhängigkeiten für die Aufnahme in das makefile, aber diese Regeln sind falsch. Die Regel-Ziel ist .d-Datei selbst und nicht als die .o... Das sieht ein Ergebnis des build-Einstellung die .d Ziel falsch mit der -MT-option. Ich sehe keine Möglichkeit, dies zu ändern, obwohl - waren Sie jemals in der Lage dieses Problem zu beheben?
- Ich war nicht in der Lage, zu beheben. Auch finden Sie in der eclipse-bug, den ich eingereicht, unten verlinkt.
- Ich habe das gleiche Problem im moment. Ich behalte lieber meine exportierten Header im /include Verzeichnis unter dem root, und wenn ich zu ändern, wie bekomme ich die Quelle verwendet, die bestimmte header zu wissen, dass es sich geändert hat?
- Blick auf die Fehler in Eclipse. in der Zwischenzeit die Menschen geschrieben einige Workarounds.
Du musst angemeldet sein, um einen Kommentar abzugeben.
gibt es einen bug für dieses Problem:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=375800
Sowie eine funktionierende und ordentlich workaround (Der orignal-requester weiß das schon). Also ich habe gerade crosslink zu der eigentlichen Antwort 🙂 https://bugs.eclipse.org/bugs/show_bug.cgi?id=375800#c11
Alle Kredite an Krzysztof Czaińsk
In Ihrem Projekt c-oder c++ - compiler-Einstellungen hinzufügen
-MT ${OUTPUT_PREFIX}${OUTPUT}
nach der flags:Dadurch wird die richtige .d-Dateien
Ergänzung: Der workaround hat einen Nebeneffekt. Nach einem sauberen
make all
läuft immer zweimal, bevor er nichts sagt, zu tun. Immer noch besser als nicht kompilieren, nach einem Wechsel 😉Ist die sicherste Sache zu tun ist, um "Saubere", das Hauptprojekt der ersten und dann neu erstellen. Oft, wenn ich weiß, welche Dateien in das Haupt-Projekt verwenden Sie die modifizierte header-Dateien, die ich nur "touch" für diese Dateien und dann neu erstellen. "Touch"ing ist für mich nur ein Leerzeichen in einer Zeile, in der Regel eines der
#include
Zeilen am Anfang der Datei. Dann die Datei neu erstellt und nimmt den geänderten header. Andere Dateien verwenden, die header nicht neu, so ist dies gefährlich. Zum Beispiel, wenn Sie die Signatur einer Methode aufrufen, und Sie wieder aufzubauen auf diese Weise wird nur die eine Datei wird korrekt aufrufen der neuen Methode. Aufruf aus anderen Quellcode-Dateien wird wahrscheinlich dazu führen, dass Ihr Programm Falle. Der Vorteil ist natürlich rebuild-Geschwindigkeit. Vor allem, wenn dabei die unit Tests, die ich genau weiss, welche tests ich werde laufen, so dass ich berühren Sie einfach die entsprechenden Dateien neu erstellen ausführen. An einem gewissen Punkt für die Sicherheit, die ich immer mache ein clean/build-Zyklus. in der Regel warte ich, bis ich brauche mehr Kaffee.Project Properties->C/C++ General->Paths and Symbols
und dann auf denReferences
tab. Ich habe die Bibliotheken, die ich abhing. Leider vertan schlecht und nahm mir eine Stunde, um es zu bekommen zurück, so habe ich vermieden, da das panel aber ich denke, dieses soll der Ort sein, zu lösen library-Abhängigkeiten.Nur werfen dies draußen, aber wäre Sie nicht noch brauchen, um die Kopfzeilen aus der statischen Bibliothek in Ihrem client-code? In dem Fall denke ich, Sie hätte hinzufügen müssen, um die Header in der
includes
Registerkarte des Projekt-Eigenschaften für Ihre Kunden. Ansonsten bin ich nicht sicher, wie würden Sie tatsächlich auf die statische lib Umsetzung in Ihrem client.Als für die zwei
references
tabs, ich glaube das man in C/C++ general kann separat definiert werden, die für verschiedene Konfigurationen, während die mehr Allgemeinen ist man für jede Konfiguration.Update:
Ich würde empfehlen, dass Allgemeine
reference
Registerkarte, die Sie bemerkte. Dies sollte sicherzustellen, dass Ihr client verweist auf andere Projekte, egal, was die aktuell ausgewählte Konfiguration der client-oder gemäß Projekt ist.Ein Weiteres Update:
Ich habe erkannt, Sie erwähnten die nur Einstellung geändert wurde, die
references
ein. Es ist eine lange gedreht, aber ich würde auch prüfen, ob die include-Pfade für die statische lib tatsächlich zeigt sich in der Registerkarte beinhaltet die Projekte, die Einstellungen (es ist wahrscheinlich). Ich verstehe den richtigen include-Pfad verwendet wird zur compile-Zeit, aber eclipse (möglicherweise) verwendet diese Registerkarte, um zu bestimmen, gehören Abhängigkeiten bei der Entscheidung zur Initiierung einer kompilieren Sie die client-Projekt. Es könnte sein, lohnt sich die "Source Location" - Registerkarte zu und versuchen Sie, den header location als Quelle.reference
Registerkarte, die Sie bemerkte. Siehe meine aktualisierte Antwort.include
tab in den Einstellungen für den client? (Überprüfen Sie das Bild in meine Antwort zu aktualisieren.)