Make file incluant des bibliothèques

Résolu/Fermé
sarah - 19 févr. 2009 à 11:07
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 20 févr. 2009 à 00:27
Bonjour,

j'essaye d'écrire un make file qui sert à générer le .s d'un fichier .c

ce fichier .c utilise des bib
exemple:
#include <algo/blast/core/blast_def.h>


comment faire?
merci
A voir également:

10 réponses

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
19 févr. 2009 à 11:36
Ce n'est pas un problème spécifique à Makefile mais plutôt à gcc. Il faut que tu précises à gcc ou trouver les headers qui ne sont pas dans un répertoire standard. Ton "algo/blast/core/blast_def.h".

En supposant que ce fichier soit dans /usr/local/pouet/include/algo/blast/core/blast_def.h, il faut passer à gcc l'option :
-I/usr/local/pouet/include

(tu peux aussi utiliser -isystem). Exemple :
gcc -c -W -Wall -I/usr/local/pouet/include mon_module.c

Si le programme plante au linkage, il faut que tu passes en paramètre de gcc le binaire de la librairie en paramètre ou une manière d'y accéder. Tout ce qui suit, contrairement au -I, ne concerne que la compilation de l'exécutable, pas celle des fichiers .o.

- si c'est un .a (librairie statique), elle se passe en paramètre à gcc au même titre qu'un .o au moment de construire l'exécutable

- si c'est un .so (libraire dynamique), par exemple libpouet.so, il faut passer à gcc l'option :
-lpouet

Exemple :
gcc -W -Wall -I/usr/local/pouet/include -o mon_executable main.c module.o libplop.a -lpouet

Si de plus la librairie pouet n'est pas dans un répertoire standard (par exemple /usr/local/pouet/lib), il faut lui dire ou la trouver à l'aide des options -Wl,R et -L (s'utilise de la même façon que -I et -isystem, sauf que c'est pour les librairies).
gcc -W -Wall -I/usr/local/pouet/include -L/usr/local/pouet/lib -Wl,R/usr/local/pouet/lib -o mon_executable main.c module.o libplop.a -lpouet


Si ceci n'est pas clair je t'invite à fouiller un peu le forum ce sont des choses que j'ai déjà expliquées par le passé.

Si tu as le choix entre .a et .so :
- choisis .a si tu veux que le programme soit facilement exécutable sur une plateforme. Concrètement le binaire de la librairie est copié dans l'exécutable, donc pas besoin pour l'utilisateur de déployer la librarie. Mais ton programme ne tirera pas partie des mises à jours éventuelles de la librairie à moins de le recompiler.
- choisis le .so si tu veux que le programme soit plus petit. Il faut que le .so soit présent sur la machine. L'avantage c'est que si le .so est mis à jour, ton programme en bénéficie.

Bonne chance
5
salut

oooooooook, ça marche , il connait le premier fichie .h
mais le problème c'est que ce dernier fichier inclu des autres fichiers qui se trouvent dans un répertoire complètement différent,
donc je dois organiser ça dans un makefile, n'est ce pas
parce qu il y a beaucoup d includes

bon s'il vous plait donnez moi où mettre ces lignes de spécifications des includes pour les fichiers .h
parce que je vais pas les compiler comme pour le cas des .c

merci
1
bonjour
merci pour votre réponse mais au fait moi j'utilise icc

et avec : icc -c -W -Wall -I/usr/local/pouet/include blast_lookup.c

il me affiche l'erreur suivante:
blast_lookup.c(36): catastrophic error: could not open source file "include/blast_def.h"
#include <include/blast_def.h>
^

compilation aborted for blast_lookup.c (code 4)
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
19 févr. 2009 à 14:14
hello
il y a un include de trop, non ?
icc -c -W -Wall -I/usr/local/pouet blast_lookup.c

puisque:
#include <include/blast_def.h>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
salut

merci mais au fait, non

#include <include/blast_def.h>
c'est le premier fichier à inclure

les fichiers sont bien dans le repertoire: users/ladj/Dounia/blast/include
y compris:blast_def.h

d'abors il accepte pas le -W:
icc: Command line remark: option '-W' not supported

et puis quand j'exclu le -W et je fais:
icc -c -Wall -I/users/ladj/Dounia/blast/include blast_lookup.c

il me signale:
blast_lookup.c(36): catastrophic error: could not open source file "include/blast_def.h"
#include <include/blast_def.h>
^

compilation aborted for blast_lookup.c (code 4)

merci
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
19 févr. 2009 à 15:45
avec
-I/users/ladj/Dounia/blast/include
et
#include <include/blast_def.h>
il va chercher blast_def.h dans /users/ladj/Dounia/blast/include/include
non ?
0
salut

ooh, oui désolé, au fait j'ai fait une confusion avec les deux includes ;)

merci beaucoup
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
19 févr. 2009 à 16:38
utiliser plusieurs -I
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
19 févr. 2009 à 21:07
Comme dit dubcek, tout simplement : -I/usr/local/pouet/include -I/usr/local/plop/include
Normalement un paramètre passé par -I devrait toujours finir par "/include".

De même un paramètre passé par -L ou -Wl,R devrait toujours finir par "/lib". De manière complètement similaire à l'option -I, tu peux mettre plusieurs -L / -Wl,R dans une ligne de compilation.

Bonne chance
0
ooooooooook
merci beaucoup ça marche très bien
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
20 févr. 2009 à 00:27
Yep :-)

Bonne continuation
0