INTRODUZIONE ALLA PROGRAMMAZIONE IN C



Programmazione di Make



La programmazione di make e' abbastanza lineare; fondamentalmente, dobbiamo scrivere una sequenza di comandi che descrivano come il nostro programma (o un sistema di programmi) puo' essere costruito a partire dai file sorgenti. La sequenza di costruzione viene descritta nel file "makefile", che contiene regole di dipendenza e regole di interpretazione. Una regola di dipendenza ha due parti (una parte destra ed una sinistra, separate da ":"): left_side : right_side La parte sinistra e' formata dal nome di un target (nome del programma o del file di sistema) che deve essere creato, mentre la parte destra fornisce i nomi dei file da cui dipende il file di target (ad esempio, file sorgenti, file header o file di dati). Se il file target risulta non aggiornato rispetto alle parti che lo costituiscono, e' necessario sottostare alle regole di interpretazione (o di costruzione) che seguono le regole di dipendenza. In questo modo, nel caso di un tipico programma C, quando di esegue il makefile vengono seguiti questi passi:

  1. Viene letto il makefile: questo riporta quali oggetti e file di libreria necessitano di essere linkati e quali file header e sorgenti devono essere compilati per creare ogni file oggetto.
  2. Data e ora di ogni file oggetto vengono controllati con quelli di ogni file sorgente e file header da cui dipende. Se un qualsiasi file sorgente o header risulta piu' recente rispetto al file oggetto, allora i file sono stati modificati dopo l'ultima compilazione e percio' viene ricompilato il file oggetto.
  3. Una volta che tutti i file oggetto sono stati controllati, vengono controllati data e ora di tutti i file oggetto e confrontati con quelli del file eseguibile. Se uno qualsiasi dei file risulta piu' recente, allora i file oggetto verranno ricompilati.
Facciamo presente che i file di make possono obbedire ad un qualsiasi comando che venga digitato sulla linea di comando. Percio' possiamo usare i makefile per fare molto piu' che compilare un modulo sorgente del sistema. Per esempio, potremmo fare backup di file, eseguire programmi se i file di dati risultano variati, oppure ripulire directory.