comment utiliser le makefile à inclure .une bibliothèque statique et .h fichier à partir d'un autre répertoire en C?
J'ai créé un .h
fichier d'en-tête, mis en œuvre et créé .a
statique fichier de bibliothèque, deux d'entre eux sont dans le répertoire en dire, /home/data/folder1
.
J'ai une autre .c
fichier qui va utiliser le lien .h
fichier d'en-tête et le .a
fichier de bibliothèque. Cependant, la .c
fichier est dans le répertoire /home/data/folder2
.
Que dois-je écrire dans le fichier Makefile (qui est également situé dans /home/data/folder2
)? Aussi, dois-je inclure myheader.h
dans le .c
fichier que je veux compiler? Voici ce que j'ai à ce jour, mais ne fonctionne pas:
LIBB = -L/home/data/folder1/libmylib.a
HEADER = -L/home/data/folder2/myheader.h
main: main.o
gcc $(HEADER) $(LIBB) $< -o $@
main.o: main.c
gcc -c main.c
.PHONY: clean
clean:
rm -f *.o *.~ a.out main
Toute aide sera appréciée, merci d'avance!
OriginalL'auteur CTownsend | 2013-10-13
Vous devez vous connecter pour publier un commentaire.
Y compris les fichiers d'en-tête et les bibliothèques de non-répertoires standard est simple.
- Vous le chemin vers le répertoire contenant la bibliothèque et celui contenant l'en-tête, de sorte que nous stocker dans des variables:
Maintenant GCC a besoin de savoir où chercher pour les en-têtes, nous avons simplement l'inclure dans le
CFLAGS
. L'éditeur de liens (pas le compilateur a besoin de savoir où chercher pour les bibliothèques, afin que nous puissions l'ajouter àLDFLAGS
:Il va utiliser la
CFLAGS
etLDFLAGS
automatiquement si vous n'avez pas explicitement exécuter GCC.Mais pour l'étape de liaison, il a besoin de savoir que la bibliothèque est nécessaire, donc:
Le linker va chercher
libmylib.a
dans tous les répertoires nommés par le-L
options dansLDFLAGS
.Depuis vos règles pour
main
etmain.o
sont explicites, les modifier comme (mais assurez-vous d'utiliser un onglet, et non pas de 4 espaces):Vous à ajouter
-I.
et-L.
, mais le processus est tout de même. Mais les deux règles pourmain
etmain.o
vous pouvez quitter en toute sécurité hors de lagcc
ligne et il va faire la bonne chose. Aussi, oui, vous besoin d'avoir une#include
directive dans votre.c
fichier.OriginalL'auteur greyfade