La seconda linea deve iniziare con un TAB (non la scritta 'TAB') e contiene cosa il programmatore scriverebbe per ottenere quel target.

Documenti analoghi
perror: individuare l errore quando una system call restituisce -1

Compilazione e Makefile

Compilazione e Makefile

Un codice sorgente. Introduzione alla compilazione automatica: Make e Makefile. Generazione di un programma eseguibile. Un codice sorgente

Makefile. Il file dependency system di Unix (serve ad automatizzare il corretto aggiornamento di più file che hanno delle dipendenze)

LABORATORIO DI SISTEMI OPERATIVI

Makefile. Il file dependency system di Unix (serve ad automatizzare il corretto aggiornamento di più file che hanno delle dipendenze)

Lezione 19: Il preprocessore

Laboratorio di Algoritmi e Strutture Dati

Introduzione al C. Unità 10 Preprocessore

Ambienti Operativi: Make

Il linguaggio C. Il preprocessore...

Il preprocessore. Direttiva define Direttiva include Direttiva if

Utilizzo di make e di Makefile per compilare programmi in C e in C++

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Il comando make. Per produrre un eseguibile da un programma C sono necessari tre passi compiuti dai seguenti moduli:

Uso di GCC da riga di comando

Introduzione a Linux Lezione 7 Programmare in Linux

Introduzione al C. Unità 10 Preprocessore. D. Bloisi, S. Peluso, A. Pennisi, S. Salza

IL PREPROCESSORE LORENZO BRACCIALE

L utility Unix awk [Aho-Weinberger-Kernighan]

Preprocessore, linker e libreria standard

Cenni sul preprocessore e il suo utilizzo

Primo passo: il preprocessor. Il preprocessore. Esempi di direttive al preprocessore: #include. Esempi di direttive al preprocessore: #define

Funzionalità. Il preprocessore C. Inclusione di file. Inclusione di file

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 4 24/10/2013

Introduzione alla programmazione nella shell di Unix 10 Maggio 2005

Linea di comando. Compilazione. Aprire una shell di DOS tramite:

Il linguaggio C. Il preprocessore...

IL PREPROCESSORE LORENZO BRACCIALE

Corso di Laboratorio di Sistemi Operativi A.A

Preprocessore, linker e libreria standard

Le direttive del Preprocessore

PER UTILIZZARE LCC IN LAB

Preprocessore. Unità 9. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi Si ringrazia Raffaele Nicolussi

Strumenti integrati Free Software per lo sviluppo

Perché il linguaggio C?

prova.c #include <stdio.h> char funzione(char); codice oggetto del main()

Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.

Page 1. Programmazione. Shell e programmazione. File comandi (script) Introduzione alla programmazione nella shell di Unix

Makefile e opzioni compilatore C

Programmazione I - Laboratorio

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Esercitazione 1 la shell

Elementi di Base. Introduzione a Python.

Preprocessore (cpp) Compilatore (gcc)

Introduzione a GNU/Linux

Astrazione. Lab.Calc. AA 2007/08 2

Linguaggi Compilati vs. Interpretati

Analizzatori Lessicali con JLex. Giuseppe Morelli

Client - Interfaccia - Implementazione

Programmare. Compilatori e interpreti. Editor :: vi. Hello1.c. #include <stdio.h> >> cc Hello1.c. main() { printf( \n Hello World!

La direttiva #include

Primi passi col linguaggio C

C: primi elementi. Lezione 4

Introduzione alla programmazione A. Ferrari

I/O da tastiera e direttive processore. Alessandra Giordani Lunedì 3 maggio

Perché il linguaggio C?

Preprocessing, compilazione ed esecuzione. Utilizzando strumenti GNU...

Iniziare a programmare in C++

#include <stdio.h> main() { - 1 -

L utility Unix awk [Aho-Weinberger-Kernighan]

Laboratorio di informatica Ingegneria meccanica

Introduzione al DEV C++

MS Visual Studio: Linea di Comando

Funzioni, Stack e Visibilità delle Variabili in C

Introduzione al linguaggio C Primi programmi

Introduzione alla programmazione in C

Bloodshed Dev-C++ Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment. Codice corso: 21012

Lezione V Fondamenti di Ingresso/Uscita

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 2

Primo programma in C

Qualsiasi programma in C++ segue lo schema:

Primo Avvio. MVux. Primo avvio. Nicola Corriero

Compilazione separata

SISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi

Laboratorio 1. 15/16 marzo 2018

BREVISSIMA GUIDA AL SISTEMA UNIX / LINUX

Shell BASH. Variabili Redirezione

Sunto della scorsa lezione Il linguaggio C. Un Programma con Errori. Il preprocessore. Linguaggi di Programmazione I.

Build Automation: Introduzione a Make, Autotools e CMake. Luca Ceresoli

L ambiente UNIX/Linux. Strumenti per la programmazione C Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

Laboratorio di Programmazione Laurea in Bioinformatica

Il comando Make: : uno strumento per la compilazione ed esecuzione di software applicativo. A. Murli - Cacolo Scientifico a.a.

PROGRAMMA = ALGORITMO

Primi programmi in C

Comandi principali di Linux (1)

Introduzione al Foglio Elettronico

Esempio. Le istruzioni corrispondono a quelle di sopra, ma sono scritte in modo simbolico. E indipendente dalla machina

Strutture di Controllo

Funzioni, Stack e Visibilità delle Variabili in C

C funzioni à scope di variabili

Introduzione a Python e Gurobi

IDE DevC

Transcript:

Makefile - 1 Quando i progetti hanno molti file, l'uso di un makefile facilita la compilazione. Il makefile capisce quale file deve essere ricompilato e fa il link nuovamente solo di questi file. Esso evita che si riscrivano comandi di compilazione. Evita pure che si facciano compilazioni non necessarie, cioè i file compilati vengono scoperti e confrontati con i sorgenti (quelli da cui dipendono). Un semplice makefile è composto da una linea di dipendenza, che dice da cosa dipende il comando che si vuol eseguire ('target') ed una linea che dice come ottenere quel comando. target: prerequisiti commandi...... Il testo della prima linea deve iniziare nella prima colonna non accetta spazi all'inizio. La prima linea specifica un 'target' e dopo un ':' i file da cui dipende quel target. (Prerequisiti = file di input necessari per generare quel target). La seconda linea deve iniziare con un TAB (non la scritta 'TAB') e contiene cosa il programmatore scriverebbe per ottenere quel target. Esempi di attività che si possono fare sono: generare un eseguibile, fare una installazione, comprimere i file ed inserirli in un archivio, etc. Makefile - E. Tramontana 11/5/03 1/5

Makefile - 2 Per eseguire un makefile basta scrivere make target se il nome del file è Makefile, altrimenti make -f nomefile target Un commento nel file inizia con un # e continua fino alla fine della linea. Es. Creazione di un makefile che svolge le attività: creazione di un eseguibile chiamato stack a partire dai file sorgenti, creazione di un file di archivio stack.tar.gz che contiene sorgenti ed eseguibile, eliminazione di file eseguibile ed archivio. Commento: ### Il mio primo makefile Target e dipendenze stack: main_stack.c stack.c Comandi per ottenere quel target gcc main_stack.c -o stack gzip: main_stack.c stack.c stack tar -cvf stack.tar main_stack.c stack.c stack gzip stack.tar clean: rm stack.tar.gz stack Makefile - E. Tramontana 11/5/03 2/5

Makefile - 3 Un comando di makefile che necessita di una linea lunga può essere spezzato in più linee per mezzo di un backslash '\' rm stack.tar.gz \ stack make elabora la regola del comando che abbiamo richiesto, ma prima considera i prerequisiti e se necessario elabora prima le regole che permettono di soddisfare i prerequisiti. In un makefile possiamo definire delle macro (sono simili a variabili che contengono testo o comandi) ed usarle successivamente. Definizione della macro oggetti: oggetti = main_stack.c stack.c stack L'espansione della macro si fa sempre attraverso $(...) gzip: $(oggetti) tar -cvf stack.tar $(oggetti) gzip stack.tar In tal modo evitiamo di dover riscrivere la lista dei file più volte. Un makefile può contenere delle direttive, per includere altri makefile. include filename il programma make interrompe la lettura del makefile, per leggere ciascun makefile incluso. Alla fine riprenderà la lettura del makefile iniziale. I file inclusi possono avere delle macro condivise (definite in uno di essi). Makefile - E. Tramontana 11/5/03 3/5

Makefile - 4 Possiamo scrivere delle condizioni all'interno di un makefile, per es. per specificare quali librerie includere quando si compila con gcc ifeq è la direttiva per iniziare una condizione e verifica se i 2 argomenti, separati da virgola, sono uguali. Le linee seguenti sono elaborate se la condizione è verificata. ifeq ($(CC), gcc) $(CC) -o foo $(oggetti) $(lib_gcc) else $(CC) -o foo $(oggetti) $(normal_lib) endif Si può opzionalmente specificare un else endif termina la direttiva di condizione. La direttiva ifneq(arg1, arg2) eseguirà le linee dopo ifneq se i due argomenti sono diversi. La direttiva ifdef nomevariabile verifica se la variabile specificata è non vuota ed in caso positivo esegue le linee seguenti. ifdef CC @echo CC è definita endif ifndef è la direttiva per verificare se una variabile è vuota. Makefile - E. Tramontana 11/5/03 4/5

Makefile - 5 Le regole implicite si applicano a tutti i file che hanno una certa estensione. Sintassi: [s-dir].source-extension.[t-dir][target-extension]: [comando] Per avere il target che l'utente ha inserito, ci vengono in aiuto alcune macro predefinite (la cui espansione non necessita ()): $@ restituisce il target completo (con il percorso) $& restituisce il nomefile, senza estensione e senza percorso Esempio:.c: gcc $@ -o $@ quando eseguiamo make nomefile, viene eseguito gcc nomefile.c -o nomefile Makefile - E. Tramontana 11/5/03 5/5