View Full Version : Makefile - problemi di linking
Dato il seguente Makefile:
prova: main.o SequenceTag.o MsmSpectra.o msmFile.o
g++ -o prova main.o SequenceTag.o MsmSpectra.o msmFile.o
main.o: main.cpp MsmSpectra.h msmFile.h
g++ -c main.cpp
SequenceTag.o: SequenceTag.cpp SequenceTag.h
g++ -c SequenceTag.cpp
MsmSpectra.o: MsmSpectra.cpp MsmSpectra.h SequenceTag.h
g++ -c MsmSpectra.cpp SequenceTag.o
msmFile.o: msmFile.cpp msmFile.h
g++ -c msmFile.cpp
Mi da il sequente errore:
g++ -c main.cpp
g++ -c MsmSpectra.cpp SequenceTag.o
g++: SequenceTag.o: linker input file unused because linking not done
g++ -o prova main.o SequenceTag.o MsmSpectra.o msmFile.o
Cosa sto sbagliando?
Grazie :)
ilsensine
07-11-2005, 13:08
MsmSpectra.o: MsmSpectra.cpp MsmSpectra.h SequenceTag.h
g++ -c MsmSpectra.cpp SequenceTag.o
SequenceTag.o non serve a nulla qui.
Ok.. l'ho tolto..
ma ora se modifico il file SequenceTag.h dando un risultato in output diverso
non mi vede le modifiche a meno che non creo io manualmente l'oggetto di SequenceTag.cpp.
Cosa sbaglio?
grazie
ilsensine
07-11-2005, 13:24
Una modifica a SequenceTag.h implica una ricompilazione di SequenceTag.o e MsmSpectra.o, che a loro volta implicano un nuovo link di "prova". Non c'è nulla di sbagliato ad occhio.
ilsensine
07-11-2005, 13:28
Hai tolto solo il .o? Il .h è necesssario se c'è dipendenza; la regola deve apparire così:
MsmSpectra.o: MsmSpectra.cpp MsmSpectra.h SequenceTag.h
g++ -c MsmSpectra.cpp
Si certamente, ho tolto solo il .o.
Il Makefile è il seguente:
prova: main.o SequenceTag.o MsmSpectra.o msmFile.o
g++ -o prova main.o SequenceTag.o MsmSpectra.o msmFile.o
main.o: main.cpp MsmSpectra.h msmFile.h
g++ -c main.cpp
SequenceTag.o: SequenceTag.cpp SequenceTag.h
g++ -c SequenceTag.cpp
MsmSpectra.o: MsmSpectra.cpp MsmSpectra.h SequenceTag.h
g++ -c MsmSpectra.cpp
msmFile.o: msmFile.cpp msmFile.h
g++ -c msmFile.cpp
Una volta che modifico il file SequenceTag.cpp e che digito il comando make, in shell appare:
g++ -c SequenceTag.cpp
g++ -c MsmSpectra.cpp
g++ -o prova main.o SequenceTag.o MsmSpectra.o msmFile.o
Ma una volta che eseguo il programma ./prova l'output non varia.
Non capisco perchè!
ilsensine
07-11-2005, 13:52
Qualche file di codice per riprodurre il problema? Vedrai che l'inghippo c'è.
E' strano, ho provato a modificare il main, cambiando una cosa irrilevante, e poi ho dato il make e ora mi vede le modifiche.
Quindi i fatti sono:
se modifico SequenceTag.h e basta la modifica non appare.
Se invece modifico SequenceTag.h e main.cpp la modifica appare.
Ti posso dire i file che includono:
main.cpp
#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <stdlib.h>
#include <string.h>
#include <fstream>//library used for the file stream operation
#include <sstream>
#include <iomanip>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "MsmSpectra.h"
#include "msmFile.h"
SequenceTag.h
#include <iostream>
SequenceTag.cpp
#include <iostream>
#include "SequenceTag.h"
MsmSpectra.cpp
#include <iostream>
#include "MsmSpectra.h"
MsmSpectra.h
#include <iostream>
#include "SequenceTag.h"
msmFile.cpp - questo però non usa SequenceTag.h
#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <stdlib.h>
#include <string>
#include <fstream>//library used for the file stream operation
#include <sstream>
#include <iomanip>
#include "MsmSpectra.h"
#include "msmFile.h"
msmFile.h
nulla
ilsensine
07-11-2005, 14:19
Mi dispiace, ma se non puoi procurarmi del codice da poter compilare e testare in locale, non posso dirti dove stai sbagliando.
Non deve essere il codice su cui stai lavorando, ma qualcosa che consenta di verificare il problema in maniera riproducibile.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.