Kann ich in alle C/C++ - Projekte Include-Pfade und -Bibliotheken hinzufügen? Mit anderen Worten: Wie kann ich sie global machen oder eine C/C++ - Projekterstellung in eine andere kopieren?
Für Eclipse Indigo: Es gibt keine Möglichkeit, globale Include-Pfade und -Bibliotheken zu definieren. Sie können sie jedoch von einem Projekt in ein anderes exportieren und importieren.
Gehen Sie zu Projekt> Eigenschaften> C/C++ - Allgemein> Pfade und Symbole Klicken Sie anschließend auf Export Settings ... , um die Include-Pfade und/oder Symboldefinitionen in a zu speichern Datei. In Ihrem anderen Projekt können Sie dann Import Settings ... verwenden.
Ja, Sie können in 2 Schritten benutzerfreundlicher sein als der von parvus erwähnte. Beide werden in "Projekteigenschaften" -> "C/C++ - Allgemein" -> "Pfade und Symbole" ausgeführt:
[Exp]
-Tag hinzugefügt wird.Das Referenzieren der Bibliotheken funktioniert auf dieselbe Weise.
Schauen Sie sich auch an:
Ich verwende häufig die CPATH-Umgebungsvariable, um verschiedene Verzeichnisse in alle meine Projekte aufzunehmen. Es befindet sich unter: c/c ++ -> build-> environment. Achten Sie darauf, jeden Pfad durch ein ':' - Zeichen (kein Semikolon;;) zu trennen.
Sie können auch PATH verwenden, um statische Bibliotheken einzuschließen. Für mich hat es jedoch nur in Linux zuverlässig funktioniert. In OSX machen es Ruinen.
Die Alternative wäre, diese Bibliotheken und Header zu den Standardsuchpfaden Ihrer Umgebung hinzuzufügen. Platz gefällt mir/usr/local/lib. Informieren Sie sich darüber, wo Ihr Linker standardmäßig sucht.
Für Bibliotheken mache ich Folgendes im Quellprojekt:
Projekt -> Eigenschaften -> c/c ++ Build -> C++ - Linker -> Bibliotheken
Danach wähle ich Bibliotheken (Shift + Maus) & Kopieren (Strg + C)
Im leeren Projekt:
Projekt -> Eigenschaften -> c/c ++ Build -> C++ - Linker -> Bibliotheken
strg + V (Einfügen)
Funktioniert gut mit Eclipse juno
Ich kopiere einfach ein Projekt von Eclipse, das in Project Explorer erstellt wurde. Benennen Sie anschließend einfach die Quelldateien um.
Ich untersuche es schon vor langer Zeit. In einigen Beiträgen wurde eine Methode erwähnt: Projekt> Eigenschaften> C/C++ - Allgemein> Pfade und Symbole Klicken Sie dann auf Einstellungen exportieren. Aber es funktioniert nur für das Einschließen von Header-Dateien.
Um Bibliotheken und Bibliothekspfade anzugeben, finde ich meines Wissens keine einfache Lösung. Zum Beispiel verwende ich jetzt ffmpeg-Bibliotheken. Wenn Sie "Makefile" verwenden, wird das eingeschlossen und Bibliotheksdateien können unten ausgedrückt werden:
FFMPEG_LIBS = libavdevice
libavformat
libavfilter
libavcodec
libswresample
libswscale
libavutil
CFLAGS: = $ (Shell pkg-config --cflags $ (FFMPEG_LIBS)) $ (CFLAGS) LDLIBS : = $ (Shell pkg-config --libs $ (FFMPEG_LIBS)) $ ( LDLIBS)
Es gibt viele Dateien hier. Wenn ich sie einzeln in ein Eclipse-C++ - Projekt einbeziehe, ist das erschreckend. Ich weiß nicht, warum es in Eclipse keine Option gibt, dass wir Bibliotheksdateien einschließen könnten durch Verwendung einer langen Zeile mit; als Trennzeichen wie:
-lavdevice -lavfilter -lswresample -lswscale -lavformat -lavcodec -ldl -lasound -lSDL -lz -lrt -lavutil -lm
Gibt es einen solchen Weg, oder muss ich die Bibliotheksdateien einzeln eingeben oder Makefile verwenden?
Semiautomatisch kann dies mit diesem Perl-Skript durchgeführt werden:
#!/usr/bin/Perl
# pipe the (gcc) compile command into this script
# It emits listOptionValue lines to paste into .cproject
#
# To easily find the paste location, set the include path as usual to a string
# that is easily recognizable in the .cproject, e.g. to "MARKER_INCLUDE_PATH".
#
# Make sure Eclipse is not running while you do these sorts of hacks and backup
# your .cproject before.
# -----------------------------------------------------------------------------------------
# sample line: <listOptionValue builtIn="false" value="/usr/include/gdk-pixbuf-2.0"/>
while (<>) {
@include_options = m#-I *(.*?) #g;
print join ("\n", @include_options) . "\n";
print join ('"/>' ."\n" . ' <listOptionValue builtIn="false" value="', @include_options);
print '"/>' . "\n";
}
Ich stand vor demselben Problem und löste es so: Ich sah, dass in dem automatisch generierten Makefile Zeilen vorhanden sind:
-include ../makefile.init
...
-include ../makefile.defs
...
-include ../makefile.targets
nach dem Lesen von Wie kann ich eine von Eclipse generierte make-Datei parametrisieren Ich habe festgestellt, dass Sie Variablen außerhalb Ihres Projekts definieren können. Das bedeutet, dass es variabel für mehrere Projekte verwendet werden kann. Also habe ich die Datei makefile.defs außerhalb des Projekts hinzugefügt und einige Variablen darin deklariert:
MY_INCLUDE = <path to include>...
MY_LIBS_PATH = <path to libs>...
MY_LIBS = -lmylib ... (the libs)
als in allen meinen Projekten "Eigenschaften-> C/C++ - Build-> Build-Variablen" habe ich eine neue Variable definiert:
my_include = $(MY_INCLUDE)
my_libs_path = $(MYLIBS_PATH)
my_libs = $(MY_LIBS)
Und dann kannst du diese Variablen in den Projekten. Gehen Sie zu properties-> c/c ++ build-> Settings und wählen Sie Compiler include und fügen Sie $ (my_include) hinzu. Gehen Sie zum Linker, wählen Sie Bibliotheken und fügen Sie den Suchpfad $ (my_libs_path) hinzu. Aus irgendeinem Grund können die Bibliotheken (-l) meine definierte env-Variable nicht verwenden, daher umgehe ich sie, indem ich den Linker auswähle und dann zu Miscellaneous gehe und den Linker-Flags $ (my_libs) hinzufüge. Schließlich müssen Sie die Reihenfolge in der Befehlszeile ändern (wenn der Linker ausgeführt wird), da die Liste der Bibliotheken nach den .o-Dateien erscheinen muss. Um dies zu tun, gehen Sie zu Linker und Tab und dort können Sie die letzte Befehlszeile sehen, die ausgeführt wird. In "Befehlszeilenmuster für Experteneinstellungen" verschieben Sie $ {FLAGS} an die Rückseite der Befehlszeile (wodurch die Zeichenfolge $ (my_libs) an die Rückseite der Befehlszeile verschoben wird). DAS ALLES. Es ist eine Menge, aber Sie müssen es nur einmal tun ... hoffe, dass es jemandem hilft ...