wake-up-neo.net

Mit Eclipse: Hinzufügen von Include-Pfaden und -Bibliotheken für alle C/C++ - Projekte

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?

19
Walidix

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.

13
parvus

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:

  1. In einem vorhandenen Projekt, in dem Sie bereits die Include-Pfade konfiguriert haben: Markieren Sie die Include-Pfade (auf der Registerkarte "Includes"), die Sie in das neue Projekt kopieren möchten, und wählen Sie "Exportieren". Beachten Sie, dass dadurch jeder Zeile ein [Exp]-Tag hinzugefügt wird.
  2. Im neu erstellten Projekt: Aktivieren Sie auf der Registerkarte "Verweise" das Kontrollkästchen des gerade genannten Projekts. Wenn Sie wieder zur Registerkarte "Einschließen" wechseln, werden alle Pfade angezeigt, die Sie gerade exportiert haben.

Das Referenzieren der Bibliotheken funktioniert auf dieselbe Weise.

Schauen Sie sich auch an:

9
Dominik

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.

7
DiscoStu

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

5
krenon

Ich kopiere einfach ein Projekt von Eclipse, das in Project Explorer erstellt wurde. Benennen Sie anschließend einfach die Quelldateien um.

3
Nenad Bulatovic

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?

1
user1914692

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";
}
0
jif54

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 ...

0
yehudahs