Salut,
Le titre résume tout. Je voudrais savoir comment on rajoute des bibliothèques dans un makefile et à quel moment on y place le chemin.????
Merci;)
Version imprimable
Salut,
Le titre résume tout. Je voudrais savoir comment on rajoute des bibliothèques dans un makefile et à quel moment on y place le chemin.????
Merci;)
Salut,
il n'y a rien plus facile (biensur si tu le sais...)
Il existe deux parameters:
"-l" ajoute une bibliotheque
"-L" ajoute une chemin
Dans mon project j'ai besoin d'utiliser la bibliotheque pour SQLite, donc j'ai ecrit :
LOADLIBES := -lm -L/opt/sqlite-3.3.4/.libs -lsqlite3
Le nom de bibliotheque IL FAUT ECRIRE SANS "lib" et suffixe ( quand meme le fichier s'appelle libsqlite3.so ).
Bonne chance. Fredy
Oui mais a quel moment tu mets le chemin spécifique??
Peux tu me montrer ton make au complet stp???
en faite lorsque j'utilise mon makefile sur une machine ubuntu je n'ai pas de soucis par contre lorsque je l'utilise sur une machine fedora il y a des problemes car il ne reconnait pas la bibli GTK
Voici le make
(En faite je reutilise un make fournit par franck)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 # # Variables: # CC = gcc BIN = Recepteur SRC = interface_main.c copy_data.c Quitter.c Verification.c lecture_data.c files_attenuation.c OBJ = interface_main.o copy_data.o Quitter.o Verification.o lecture_data.o files_attenuation.o # # Flags d'erreurs: # ERROR_CFLAGS = -Wall -W -pedantic -g -03 # # Flags pour le compilateur: # GLIB_CFLAGS = $$(pkg-config --cflags glib-2.0) PANGO_CFLAGS = $$(pkg-config --cflags pango) GTK_CFLAGS := $$(pkg-config --cflags gtk+-2.0) CFLAGS = $(ERROR_FLAGS) $(GLIB_CFLAGS) $(PANGO_CFLAGS) $(GTK_CFLAGS) # # Flags pour l'editeur de liens: # GLIB_LDFLAGS = $$(pkg-config --libs glib-2.0) PANGO_LDFLAGS = $$(pkg-config --libs pango) GTK_LDFLAGS = $$(pkg-config --libs gtk+-2.0) LDFLAGS = $(ERROR_FLAGS) $(GLIB_LDFLAGS) $(PANGO_LDFLAGS) $(GTK_LDFLAGS) # # Construction du programme: # all: $(BIN) $(BIN): $(SRC) $(CC) $(CFLAGS) -c $(SRC) $(CC) $(LDFLAGS) -o $(BIN) $(OBJ) # # Nettoyage: # clean: rm -f *.o *~ core $(BIN)
Je ne comprends pas pourquoi ici ce make marche sous ubuntu est il n'ya aucun chemin????
De meme pouvez vous m'expliquer cette partie du code
MerciCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 # Flags pour le compilateur: # GLIB_CFLAGS = $$(pkg-config --cflags glib-2.0) PANGO_CFLAGS = $$(pkg-config --cflags pango) GTK_CFLAGS := $$(pkg-config --cflags gtk+-2.0) CFLAGS = $(ERROR_FLAGS) $(GLIB_CFLAGS) $(PANGO_CFLAGS) $(GTK_CFLAGS) # # Flags pour l'editeur de liens: # GLIB_LDFLAGS = $$(pkg-config --libs glib-2.0) PANGO_LDFLAGS = $$(pkg-config --libs pango) GTK_LDFLAGS = $$(pkg-config --libs gtk+-2.0) LDFLAGS = $(ERROR_FLAGS) $(GLIB_LDFLAGS) $(PANGO_LDFLAGS) $(GTK_LDFLAGS)
Est-tu sûr que GTK+ est bien installé sur la Fedora ? J'entend par là, pas que les runtimes mais les fichiers de développement également ! Vérifié également que pkg-config soit installé !
Ca initialise des variables comme par exemple ceci:Citation:
Envoyé par insa59
Rempli la variable avec le résultat de la commande pkg-config --cflags glib-2.0 ce qui donne sur ma console:Code:GLIB_CFLAGS = $$(pkg-config --cflags glib-2.0)
Ca fait de même pour les autres variables. Les deux catégories correspondent en fait dans l'ordre à:Code:-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
- Les chemins des fichiers d'en-tête et leur différents chemins pour que le compilateur sache où les trouver pour réussir à compiler correctement.
- Le second bloc ne fournit quant à lui pas le chemin mais les différentes bibliothèques de fonctions à lier au fichier exécutable (des fichiers *.lib, *.a, *.o même parfois) !
En espérant avoir pû t'aider ;)
désolé d'insister mais je n'arrive pas a bien comprendre le makefile.
1- J'aimerai savoir comment on fait pour rajouter les librairies GTK dans notre makefile
Je dispose deja de celui de ci dessus mais je n'arrive pas a comprendre a quelle moment on rajoute les bibliotheque durant la compilation et l'edition de lien
(il n'y a pas de chemin spécifié)
2- Une autre question : j'ai mon IHM qui a son makefile, cette IHM utilise des fichiers d'un sous répertoire qui ont leurs propre makefile. Je voulais savoir comment je devais faire pour la compilation des 2 makefiles
Peut on utilisé un makefile maitre pour l'IHM et un makefile esclave pour le makefile du fichier ( idée dans le tuto suivant)
Merci pour votre aide
Il n'y a rien à rajouter, y'a tout ce qu'il faut pour compiler un projet GTK+ ! Si le Makefile fonctionne sur une distribution mais pas sur une autre cela ne viens en aucun cas du Makefile mais de l'installation (possiblement mal faite) de GTK+ sur la distribution en cause !Citation:
Envoyé par insa59
okie tu dois surement avoir raison
mais comment je peux savoir si Gtk et bien installer??
en tapant la commande suivante??
Citation:
pkg-config --modversion gtk=-2.0
Ho je pense qu'en testant les chemins des répertoires d'inclusion devrait suffir:Citation:
Envoyé par insa59
Tu devrais avoir une sortie de ce genre:Code:pkg-config --cflags glib-2.0 && pkg-config --cflags pango && pkg-config --cflags gtk+-2.0
A savoir que seul:Code:
1
2
3 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
pour le compilateur etCode:pkg-config --cflags gtk+-2.0
pour l'édition des liens devraient suffir donc on peut éventuellement omettre les deux autres lignes de chaque groupes ;)Code:pkg-config --libs gtk+-2.0
Ta commande:
Te dis quelle version de GTK+ est installée mais par forcément si les fichiers de développement le sont !Code:pkg-config --modversion gtk+-2.0
d'accord mais je dois obtienir quoi en tapant cette commande :oops: ???
Citation:
pkg-config --cflags glib-2.0 && pkg-config --cflags pango && pkg-config --cflags gtk+-2.0
desolé je n'avais pas vue la suite
par contre pour la question 2 que je pose a tu une idée stp??
Je n'ais jamais mis ne place une compilation de ce genre par le biais des Makefile mais si c'est pas toi qui les as fait, par exemple un générateur d'un EDI, il te suffit de compilaer avec make depuis le répertoire racine où se situe le Makefile principal, il se chargera d'appeler les autres dans les sous-répertoires ;)Citation:
Envoyé par insa59
Une petite mise à jour du Makefile avec ce que j'ai dit plus haut pourrait être:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 # # Variables: # CC = gcc BIN = Recepteur SRC = interface_main.c copy_data.c Quitter.c Verification.c lecture_data.c files_attenuation.c OBJ = interface_main.o copy_data.o Quitter.o Verification.o lecture_data.o files_attenuation.o # # Flags d'erreurs: # ERROR_CFLAGS = -Wall -W -pedantic -g -03 # # Flags pour le compilateur: # GTK_CFLAGS = $$(pkg-config --cflags gtk+-2.0) CFLAGS = $(ERROR_FLAGS) $(GTK_CFLAGS) # # Flags pour l'editeur de liens: # GTK_LDFLAGS = $$(pkg-config --libs gtk+-2.0) LDFLAGS = $(ERROR_FLAGS) $(GTK_LDFLAGS) # # Construction du programme: # all: $(BIN) $(BIN): $(SRC) $(CC) $(CFLAGS) -c $(SRC) $(CC) $(LDFLAGS) -o $(BIN) $(OBJ) # # Nettoyage: # clean: rm -f *.o *~ core $(BIN)
c'est a dire que je peux avoir plusieurs makefile dans un repertoire???
Car comme tu as compris je ne souhaite pas toucher au makefile du fichier car il fait 15 pages 8O c'est de la folie!!!
Je souhaite simplement pouvoir compiler le make de mon IHM et ensuite celui du fichier
Non, que un seul par répertoires qui contient des modules de compilation que t veux compiler avec ton projet.Citation:
Envoyé par insa59
Ca sent le Makefile généré par Glade ou Anjuta ou un programme de ce genre :lol:Citation:
Envoyé par insa59
Si tu veux les compiler à part sans passer par un autre Makefile bin fait simplement un Makefile par répertoire mais alors il faut que tu fasse au moins une copie des autres. Mais je ne vois pas vraiment l'intérêt, un projet est un tout et tout est lié.Citation:
Envoyé par insa59
Comme j'ai essayé d'expliquer je dispose du makefile de l'IHM et de celui du big fichier
Pour cela je mets dans un repertoire le programme IHM et dans un sous repertoire le big fichier.
ensuite lorsque j'effectue la compilation je me situe dans le repertoire IHM pour lancer la commande make
Je voulais donc savoir si le makefile IHM devais specifier la présence d'un autre makefile dans le sous repertoire si oui quelle est la commande ???? :roll:
Donc ton but est de compiler le tout automatiquement en partant du Makefile de ton IHM ! C'est ce que j'avais compris :lol:Citation:
Envoyé par insa59
Là, je suis désolé mais je ne suis pas aussi expert que ca en Makefile :oops: Je pense qu'il n'y pas de commande mais qu'il suffit simplement d'aller dans ce répertoire et d'y lancer la commande make depuis ton Makefile du répertoire parent...
euh ...
en faite je ne sais pas si je dois appeler en faite le makefile du sous repertoire ??
je voulais simplement savoir si en tapant la commande make j'allais compiler le makefile de l'IHM et celui qui est dans le sous repertoire???
Non ca il faut le spécifier dans le Makefile appelant !Citation:
Envoyé par insa59