Repository 32bit  Forum
Repository 64bit  Wiki

Makefile [risolto]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
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 dell'ultima regola 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 11: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 15:06, modificato 1 volta in totale.
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 1:52
Desktop: gnome
Distribuzione: arch

Re: Makefile

Messaggioda puzuma » dom gen 13, 2008 13: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
Avatar utente
puzuma
Linux 2.4
Linux 2.4
 
Messaggi: 462
Iscritto il: mar lug 04, 2006 17: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 14: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 1:52
Desktop: gnome
Distribuzione: arch

Re: Makefile

Messaggioda gallows » dom gen 13, 2008 14: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: lun set 20, 2004 0:00
Località: Palermo
Kernel: FreeBSD 8.0-RELEASE-p3
Desktop: ratpoison

Re: Makefile [risolto]

Messaggioda Dani » dom gen 13, 2008 15: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 1:52
Desktop: gnome
Distribuzione: arch


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite