2013-02-28 2 views
5

Ho qualche problema con un Makefile C.C Problemi nel makefile: "gcc: -lm: file di input del linker non utilizzato perché il collegamento non è stato eseguito mpicc -lm 3D-ELM.o -o 3D-ELM.exe"

Ecco il contenuto del Makefile:

PROJECT = 3D-ELM 
MPICC = mpicc 
CLAGS = -g -O3 
LIBS = -lm 
SRC = src_el 
OBJECTS = $(PROJECT).o 

$(PROJECT).exe : $(OBJECTS) 
     $(MPICC) $(CFLAGS) $(LIBS) $(OBJECTS) -o $(PROJECT).exe 

$(PROJECT).o : $(SRC)/$(PROJECT).c 
     $(MPICC) $(CFLAGS) $(LIBS) -c $(SRC)/$(PROJECT).c 

clean: 
     rm -rf *o $(PROJECT) 

Quando faccio, qui è l'errore:

gcc: -lm: linker input file unused because linking not done

Qualcuno sa che cosa c'è che non va?

Molte grazie in anticipo,


EDIT: Ci sono. Non ho bisogno di passare libs quando faccio il file oggetto ... Doh! sbatte la testa dalla scrivania

Grazie per il vostro aiuto ragazzi,

risposta

7

Il problema viene da questa parte del makefile:

$(PROJECT).o : $(SRC)/$(PROJECT).c 
     $(MPICC) $(CFLAGS) $(LIBS) -c $(SRC)/$(PROJECT).c 

A questo punto si sta solo invocando il compilatore. L'interruttore -c dice al compilatore solo di compilare un file oggetto e il linker non è affatto coinvolto. Poiché non c'è nulla da collegare, la parte $(LIBS) non è necessaria.

Il collegamento reale è fatto alla fase successiva:

$(PROJECT).exe : $(OBJECTS) 
     $(MPICC) $(CFLAGS) $(LIBS) $(OBJECTS) -o $(PROJECT).exe 

Questo è dove i file oggetto individuali vengono fuse insieme con le librerie per produrre un eseguibile. Il compilatore stesso non viene invocato a questo punto perché i file di origine sono già stati trasformati in file oggetto.