Repository 32bit  Forum
Repository 64bit  Wiki

Makefile [risolto]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Makefile [risolto]

Messaggioda Dani » dom gen 13, 2008 10:14

Sto cercando di capire come funziona il make ma non ne vengo fuori...
Ad esempio ho tre file .c, contenente il main e i corpi delle funzioni, ed un solo header file, contenente i prototipi di tutte le funzioni e qualcos'altro.
Dal main, in file1.c, chiamo una funzione, presente il file2.c. Da quest'ultima funzione ne chiamo un'altra in file3.c...
Dopo aver dato make pero' ottengo i classici errori "undefined reference to..."
Nel makefile scrivo qualcosa tipo:
Codice: Seleziona tutto
programma : file1.o file2.o file3.o
          cc -o programma file1.o file2.o file3.o

file1.o  : file1.c header.h
          cc file1.c -o file1.o
file2.o  : file2.c header.h
          cc file2.c -o file2.o
file3.o   : file3.c header.h
          cc file3.c -o file3.o

Dov'è che sbaglio :?:
Ultima modifica di Dani il dom gen 13, 2008 14:06, modificato 1 volta in totale.
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch

Re: Makefile

Messaggioda puzuma » dom gen 13, 2008 12:38

make guida solo l'ordine con cui esegui i vari comandi non ne sa niente delle dipendenze c (infatti può essere usato per qualsiasi compito non solo la compilazione).

quindi se hai messo tutte le dichiarazioni di funzioni in header.h devi includere questo header nei vari file[1,2,3].c e scrivere il make così:

Codice: Seleziona tutto
programma : file1.o file2.o file3.o
          cc -o programma file1.o file2.o file3.o

file1.o  :
          cc file1.c -o file1.o
file2.o  :
          cc file2.c -o file2.o
file3.o   :
          cc file3.c -o file3.o


se ottieni un errore non è make che sbaglia ma il compilatore, quindi guarda nell'output di make chi sta sbagliando ed esegui il comando a mano, sistema l'errore e poi riprova a far girare make
The quiet ones are the ones who change the world. The loud ones only take the credit.
Avatar utente
puzuma
Linux 2.4
Linux 2.4
 
Messaggi: 479
Iscritto il: mar lug 04, 2006 16:14
Località: Udine
Nome Cognome: Stefano Salvador
Slackware: current
Kernel: 2.6.32.2
Desktop: KDE 4.4.0

Re: Makefile

Messaggioda Dani » dom gen 13, 2008 13:05

puzuma ha scritto:quindi se hai messo tutte le dichiarazioni di funzioni in header.h devi includere questo header nei vari file[1,2,3].c e scrivere il make così:

E' quello che ho fatto, ma make continua a dire "undefined reference to ..."
Invece se provo a compilare così:
Codice: Seleziona tutto
gcc -o programma file1.c file2.c file3.c

tutto fila liscio !
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch

Re: Makefile

Messaggioda gallows » dom gen 13, 2008 13:32

Codice: Seleziona tutto
file1.o  : file1.c header.h
          cc file1.c -o file1.o


Fai partire il linker così, devi usare la flag "-c".
Avatar utente
gallows
Staff
Staff
 
Messaggi: 3466
Iscritto il: dom set 19, 2004 23:00
Località: Palermo
Kernel: FreeBSD 8.0-RELEASE-p3
Desktop: ratpoison

Re: Makefile [risolto]

Messaggioda Dani » dom gen 13, 2008 14:11

Ok aggiungendo il flag -c compila, grazie.
Già che ci sono colgo l'occasione per chiedere un parere sul metodo di scrittura del codice...Come ho scritto prima capita nel sorgente di rimbalzare da un file all'altro; ad esempio la funzione x nel primo file chiama la funzione y del secondo. Questa a sua volta chiama altre funzioni, magari in altri files...E' una cattiva pratica di programmazione la mia ?
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti