web-dev-qa-db-fra.com

Avec Eclipse: Comment ajouter des chemins d'accès et des bibliothèques pour tous vos projets C/C++

Est-il possible d'ajouter des chemins d'accès et des bibliothèques à tous les projets C/C++? En d'autres termes: comment puis-je les rendre globaux ou copier un paramètre de construction de projet C/C++ vers un autre?

19
Walidix

Pour Eclipse Indigo: Il n’est pas possible de définir globalement les chemins et les bibliothèques. Mais vous pouvez les exporter et les importer d’un projet à un autre.

Allez dans Projet> Propriétés> C/C++ Général> Chemins et symboles Ensuite, cliquez sur Paramètres d'exportation ... pour enregistrer les chemins d'accès et/ou les définitions de symboles dans un fichier. Dans votre autre projet, vous pouvez ensuite utiliser Import Settings ...

13
parvus

Oui, vous pouvez, en 2 étapes, être plus convivial que celui mentionné par parvus. Les deux sont effectués dans "Propriétés du projet" -> "Général C/C++" -> "Chemins et symboles":

  1. Dans un projet existant où vous avez déjà configuré les chemins d'inclusion: Mettez en surbrillance les chemins d'inclusion (dans l'onglet "Inclut") que vous souhaitez copier dans le nouveau projet et choisissez "Exporter". Notez que cela ajoute une balise [Exp] à chaque ligne.
  2. Dans le nouveau projet créé: Dans l'onglet "Références", cochez la case du projet que vous venez de mentionner et lorsque vous revenez à l'onglet "Inclut", vous voyez que tous les chemins que vous venez d'exporter y apparaissent.

Le référencement des bibliothèques fonctionne de la même manière.

Regardez aussi:

9
Dominik

J'utilise souvent la variable d'environnement CPATH pour inclure différents répertoires dans tous mes projets. Il se trouve sous: c/c ++ -> build-> environment. Assurez-vous de séparer chaque chemin par un caractère ':' (et non un point-virgule).

Vous pouvez également utiliser PATH pour inclure des bibliothèques statiques. Cependant, pour moi, cela ne fonctionne de manière fiable que sous Linux. Sous OSX, les ruines font.

L'alternative serait d'ajouter ces bibliothèques et ces en-têtes aux chemins de recherche par défaut de vos environnements; endroit aime/usr/local/lib. Découvrez où votre éditeur de liens effectue des recherches par défaut.

7
DiscoStu

Pour les bibliothèques, je fais ce qui suit dans le projet source:

Projet -> Propriétés -> Génération c/c ++ -> lieur c ++ -> bibliothèques

Après cela, je sélectionne les bibliothèques (shift + souris) et copie (ctrl + c)

Dans le projet vide:

Projet -> Propriétés -> Génération c/c ++ -> lieur c ++ -> bibliothèques

ctrl + v (coller)

Fonctionne bien avec Eclipse Juno

5
krenon

Je viens de copier un projet en utilisant Eclipse intégré dans l'Explorateur de projets. Ensuite, il suffit de renommer les fichiers source.

3
Nenad Bulatovic

Je me penche sur la question il y a longtemps. Quelques articles ont mentionné une méthode: Projet> Propriétés> Général C/C++> Chemins et symboles Ensuite, cliquez sur Exporter les paramètres ... ne fonctionne que pour inclure des fichiers d'en-tête.

Pour autant que je sache, je ne trouve pas de solution facile aux bibliothèques et aux chemins de bibliothèques. Par exemple, j'utilise maintenant les bibliothèques ffmpeg. Si vous utilisez "Makefile", l'inclusion de et les fichiers de bibliothèque peuvent être exprimés ci-dessous:

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)

Il y a beaucoup de fichiers ici. Si je les inclus un par un dans un projet Eclipse C++, c’est décourageant. Je ne sais pas pourquoi Eclipse ne permet pas d’inclure des fichiers de bibliothèque. en utilisant passé une longue ligne en utilisant; en tant que séparateur, tel que:

-lavdevice -lavfilter -lswresample -lswscale -lavformat -lavcodec -ldl -lasound -lSDL -lz -lrt -lavutil -lm

Existe-t-il un tel moyen ou dois-je taper les fichiers de bibliothèque un par un ou utiliser Makefile?

1
user1914692

Semi-automatiquement, cela peut être fait en utilisant ce script Perl:

#!/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

J'ai rencontré le même problème et l'ai résolu comme ceci: J'ai vu que dans le fichier makefile généré automatiquement, il y avait des lignes:

-include ../makefile.init
 ...
-include ../makefile.defs
 ...
-include ../makefile.targets

après avoir lu Comment paramétrer un fichier make généré par Eclipse Je me suis rendu compte que vous pouvez définir des variables en dehors de votre projet. Cela signifie qu'il peut être partagé variable pour plusieurs projets. J'ai donc ajouté le fichier makefile.defs en dehors du projet et y ai déclaré des variables:

MY_INCLUDE = <path to include>...
MY_LIBS_PATH = <path to libs>...
MY_LIBS = -lmylib ... (the libs)

que dans tous mes projets "propriétés-> c/c ++ construction-> variables de construction" j'ai défini une nouvelle variable: 

my_include = $(MY_INCLUDE)
my_libs_path = $(MYLIBS_PATH)
my_libs = $(MY_LIBS)

Et que vous pouvez vous ces variables dans les projets. Allez dans propriétés-> c/c ++ build-> Paramètres et choisissez le compilateur inclus et ajoutez $ (my_include). Accédez à l'éditeur de liens, choisissez Bibliothèques et ajoutez-le au chemin de recherche $ (my_libs_path). Pour une raison quelconque, les bibliothèques (-l) ne peuvent pas prendre la variable env définie, aussi je la contourne en choisissant l’éditeur de liens, puis en allant à Divers et en ajoutant à l’éditeur de liens drapeaux $ (my_libs). Enfin, vous devez modifier l’ordre dans la ligne de commande (lorsque l’éditeur de liens s’exécute), car la liste des bibliothèques doit suivre les fichiers .o. Donc pour faire cela, vous allez dans l'éditeur de liens et l'onglet et vous pouvez voir la dernière ligne de commande qui va être exécutée. Dans "Modèle de ligne de commande des paramètres experts", vous déplacez le $ {FLAGS} au dos de la ligne de commande (ce qui déplace la chaîne $ (my_libs) pour qu’elle se trouve au dos de la ligne de commande). C'EST TOUT. c'est beaucoup, mais vous ne devez le faire qu'une fois ... espérons que cela aidera quelqu'un ...

0
yehudahs