2013-01-10 3 views
1

je le Makefile suivant pour un programme qui utilise GSL:Compiling/reliant GSL

CXX = g++ 
ARCH = -mtune=generic 
COFLAGS = $(ARCH) -O3 -pipe -I./gsl 
CXXFLAGS = -Wall $(COFLAGS) 

PROGRAMS = myProgram 
GSLFLAGS= -L./gsl/.libs -lgsl -L./gsl/cblas/.libs -lgslcblas -lm 

all: $(PROGRAMS) 
myProgram: myProgram.cpp common.o 
    $(CXX) $(CXXFLAGS) $(GSLFLAGS) myProgram.cpp common.o -o myProgram 
common.o: common.cpp common.h 

common.o: common.h common.cpp 
    $(CXX) $(CXXFLAGS) $(BOOSTFLAGS) $(GSLFLAGS) -c common.cpp 

Je reçois la sortie suivante lors de la compilation/liaison:

g++: -lgsl: linker input file unused because linking not done 

Toute idée de ce qui ne va pas?

P.S. - Je suis conscient que le drapeau -c est impliqué dedans mais le supprimer provoque d'autres problèmes.

+0

"Je suis conscient que l'indicateur -c est impliqué mais que la suppression provoque d'autres problèmes." - Bien sûr que oui. Vous devriez supprimer '$ (GSLFLAGS)' à la place. –

Répondre

2

je reçois la sortie suivante lors de la compilation/reliant

Non, vous ne le faites pas. Vous obtenez cet avertissement lors de compilation, et il vous dit exactement quel est le problème: vous passez -lgsl et -c ensemble sur la ligne de commande, et -lgsl est ignoré lorsque vous êtes pas font de liaison (qui est ce que -c demande g++ à faire).

Maintenant, votre Makefile n'a pas -c nulle part, il est donc peu probable que vous ne l'avez pas couper/coller l'intégralité de votre Makefile, et omettait séparés exactement les détails pertinents en l'espèce.

Mise à jour: c'est la ligne où vous ne voulez pas $(GSLFLAGS):

$(CXX) $(CXXFLAGS) $(BOOSTFLAGS) $(GSLFLAGS) -c common.cpp 

Enfin, cette ligne de lien:

$(CXX) $(CXXFLAGS) $(GSLFLAGS) myProgram.cpp common.o -o myProgram 

est erroné: l'ordre des sources/objets et bibliothèques sur la ligne de commande matters. La ligne de liaison correcte doit être:

$(CXX) $(CXXFLAGS) myProgram.cpp common.o -o myProgram $(GSLFLAGS) 
+0

Commander dans le processus de liaison est toujours difficile. Merci pour le rappel, résolu de nombreux problèmes. –