Comment inclure un chemin vers les bibliothèques dans g ++

96

J'essaye d'inclure le chemin vers des bibliothèques supplémentaires dans mon makefile, mais je ne peux pas comprendre comment faire en sorte que le compilateur utilise ce chemin. jusqu'ici j'ai:

g++ -g -Wall testing.cpp fileparameters.cpp main.cpp -o test

et je veux inclure le chemin vers

/data[...]/lib

car testing.cpp inclut des fichiers de cette bibliothèque. De plus, je suis sur une machine Linux.

EDIT: Pas un chemin vers une bibliothèque. Juste aux fichiers qui ont été inclus. Ma faute.

mrswmmr
la source

Réponses:

168

Pour spécifier un répertoire dans lequel rechercher des bibliothèques (binaires), utilisez simplement -L:

-L/data[...]/lib

Pour spécifier le nom réel de la bibliothèque, vous utilisez -l:

-lfoo  # (links libfoo.a or libfoo.so)

Pour spécifier un répertoire dans lequel rechercher des fichiers d' inclusion (différents des bibliothèques!), Utilisez -I:

-I/data[...]/lib

Alors je pense que ce que tu veux c'est quelque chose comme

g++ -g -Wall -I/data[...]/lib testing.cpp fileparameters.cpp main.cpp -o test
Ernest Friedman-Hill
la source
4
Fondamentalement, quelque part avant qu'il ne soit nécessaire; le -Idoit venir avant les noms de fichiers .cpp, par exemple.
Ernest Friedman-Hill
1
Est-il possible de faire en sorte que le compilateur figuigne cela, comme ajouter la bibliothèque à une variable système?
Fred
5
@Fred, oui, g ++ comprend tout un tas de variables d'environnement qui peuvent être utilisées pour contrôler le chemin d'inclusion, le chemin de la bibliothèque, etc.
Ernest Friedman-Hill
1
quelle est la différence entre -L et -I (i majuscule, pas L inférieur)?
Youda008
1
@ Youda008 Capital ell: chemin de recherche des bibliothèques. Capital eye: chemin de recherche pour les fichiers d'inclusion. Petite ell: nom de la bibliothèque à lier.
Ernest Friedman-Hill
1

Dans votre MakeFile ou CMakeLists.txt, vous pouvez définir CMAKE_CXX_FLAGS comme ci-dessous:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/path/to/your/folder")
Kartik Javali
la source