PDA

Visualizza la versione completa : [C] Makefile: definire correttamente i percorsi (path)


FastMagister
01-05-2007, 17:25
Ciao a tutti,

credo che il mio problema sia più difficile da spiegare che da affrontare, comunque, la situazione è questa:

ho sviluppato diverse funzioni in C (poniamo FUN_A, FUN_B,..., FUN_X), ognuna in un file diverso (FILE_A, FILE_B, ..., FILE_X), ed ho creato un header file con i prototipi di queste funzioni. Ho quindi inserito ognuno dei file creati in una diversa cartella (poniamo DIR_A, DIR_B, ..., DIR_X) insieme con una copia del file header e con un file .c contenente un main che richiami esclusivamente la funzione in quella cartella. Per ogni cartella ho creato un makefile che compila correttamente il programma in essa.

Detto questo, la questione è: se spostassi tutti i file con le funzioni in un unica cartella insieme al file header (poniamo /home/mionome/SORGENTI) ed avessi in un'altra cartella (poniamo /home/mionome/TEST) un file .c con un main che richiama una di queste funzioni, come dovrei variare il makefile per avere ancora una corretta compilazione?

Vi posto qui di seguito uno dei makefile funzionanti fin quando funzione, programma principale ed header sono tutti nella stessa cartella:

OBJ= FUN_A.o TEST.o

main: $(OBJ)
g++ -o main $(OBJ) -lm -lg2c

.c.o:
cc -c -O2 $<

.f.o:
f77 -c -O2 $<

clean:
rm *.o main

In pratica, cosa devo aggiungere al makefile per dirgli dove sono tutte le risorse di cui ha bisogno?

Spero di essermi fatto capire, grazie 100...

puntino
02-05-2007, 17:50
non vorrei essere banale ma potresti provare a far prcedere i file incui specifichi le loro funzioni dal percorso assoluto o relativo

andbin
02-05-2007, 18:18
Originariamente inviato da FastMagister
In pratica, cosa devo aggiungere al makefile per dirgli dove sono tutte le risorse di cui ha bisogno?Hai usato quelle che si chiamano "suffix-rules" (.c.o) che, tra l'altro, è il modo "obsoleto". Esistono anche le "pattern-rules", cioè %.o: %.c

Comunque, a parte questo, puoi specificare delle dipendenze aggiuntive, es:

output.o: ../foo/src.c ../foo.src.h

e così via.

FastMagister
17-05-2007, 10:48
Originariamente inviato da andbin
Hai usato quelle che si chiamano "suffix-rules" (.c.o) che, tra l'altro, è il modo "obsoleto". Esistono anche le "pattern-rules", cioè %.o: %.c

Comunque, a parte questo, puoi specificare delle dipendenze aggiuntive, es:

output.o: ../foo/src.c ../foo.src.h

e così via.

Credo che questa possa essere la strada giusta, ma sono totalmente a digiuno dell'argomento...

Potreste indicarmi (magari usando i nomi di file e directory che ho usato io per spiegarvi il tutto...) come scrivere questo makefile?

Tra l'altro, qualcuno mi diceva che si potrebbe inserire qualcosa del tipo $(PATH)/SORGENTI o $(PATH)/TEST ma come...??

Help me, please...

Loading