Make file incluant des bibliothèques
Résolu
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
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
Configuration: Windows XP Internet Explorer 6.0
10 réponses
-
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 -
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 -
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) -
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> -
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 -
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 ? -
salut
ooh, oui désolé, au fait j'ai fait une confusion avec les deux includes ;)
merci beaucoup -
utiliser plusieurs -I
-
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 -
Yep :-)
Bonne continuation