Compilazione e Makefile

Похожие документы
Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Gestione di files Motivazioni

Il calcolatore. Architettura di un calcolatore (Hardware)

4 GLI ARRAY E LE STRINGHE

Cosa è importante: pom.xml Goal Plug-in Repository

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

testo Saveris Web Access Software Istruzioni per l'uso

Esercitazione 4. Comandi iterativi for, while, do-while

INTRODUZIONE ALLE BASI DATI RELAZIONALI

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

Linguaggio C Compilazione, linking e preprocessor

Files in C++ Fondamenti di Informatica. R. Basili. a.a

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

Input/output in C e in C++

Introduzione alle macchine a stati (non definitivo)

Importazione dati. e/fiscali Spesometro - Rel con gestionale e/satto. Gestionale e/satto

Java Native Interface Appunti

2) FILE BINARI: è una sequenza di byte avente una corrispondenza uno a uno con la sequenza ricevuta dal dispositivo esterno.

La disposizione estetica della lettera commerciale

Gestione delle eccezioni in Java

Il file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato.

Procedura operativa per la gestione della funzione di formazione classi prime

WINDOWS Avviare Windows95. Avviare Windows95 non è un problema: parte. automaticamente all accensione del computer. 2. Barra delle applicazioni

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

DESCRIZIONE CREAZIONE APP Si suddivide in 4 fasi di lavoro: 1. PIANIFICAZIONE; 2. PROGETTAZIONE; 3. SVILUPPO; 4. DISTRIBUZIONE.

Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova.


Ingegneria del Software

Linguaggio C. Fondamenti. Struttura di un programma.

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

Lab. di Sistemi Operativi - Esercitazione n 2 - a.a. 2012/2013

EPOD.com MAGAZZINO RICAMBI MANUALE D USO. Aggiornamento 01/05/2010 pag.1

Le sue caratteristiche:

Gestione risorse (Windows)

PG5 Starter Training Applicazione File System Daniel Ernst EN Stefano Peracchi IT

UNIWEB- GUIDA STUDENTE INSERIMENTO PIANO DEGLI STUDI ON LINE

7 Disegni sperimentali ad un solo fattore. Giulio Vidotto Raffaele Cioffi

Grafici e Pagina web

NOZIONI BASE PER ESERCITAZIONI

INTRODUZIONE, LINGUAGGIO, HANDS ON. Giuseppe Cirillo

COMUNICAZIONE UTENTI SISTEMI-PROFIS INSTALLAZIONE GE.RI.CO e PARAMETRI2016

Manutenzione periodica al PIANO DEI CONTI

Autodesk Map parte I digitalizzazione e importazione dati

Symantec IT Management Suite 8.0 powered by Altiris technology

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari

L INTERFACCIA GRAFICA DI EXCEL

VALORIZZAZIONE MOVIMENTI DI SCARICO E VALORIZZAZIONE TRASFERIMENTO COSTI DI ANALITICA

SQL Server Architettura Client-Server. SQL Server Introduzione all uso di SQL Server Dutto Riccardo.

Manuale Operativo Gestione dei Ticket di assistenza 15 Marzo 2016

Come utilizzare i riferimenti assoluti e relativi in Microsoft Excel

Laboratorio di Elementi di Bioinformatica

Manuale Utente CMMG Corso Medici Medicina Generale

POSTALIZZAZIONE Manuale d'uso del modulo di postalizzazione di RipartoIG

Specifiche tecniche e di formato Presentazione comunicazione unica per la nascita d impresa

SPECIFICHE OPERATIVE X LA CONTABILITA DEI PROFESSIONISTI

COMPILAZIONE. Tarsformazione di linguaggi

Pubblicazione di app, fogli e racconti. Qlik Sense 1.1 Copyright QlikTech International AB. Tutti i diritti riservati.

Risoluzione di problemi ingegneristici con Excel

* in giallo le modifiche apportate rispetto alla versione precedente datata 17/04/2012

SPORTELLO DIPENDENTE. - Personale amministrativo tecnico ausiliario (A.T.A.);

Ministero della Salute

Questa è la finestra dei dettagli, è possibile selezionare anche da qui un modello o un pezzo per essere aperto.

GESTIONE DELEGA F24 RAVVEDIMENTO OPEROSO

PSICOMETRIA. Esercitazione n.1. C.d.L. Comunicazione e Psicologia a.a. 2012/13

Header. Unità 9. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

IL LINGUAGGIO C NOSTRO APPROCCIO AL C. Sempre con esempi che illustrano le caratteristiche del linguaggio. SCRIVERE ED ESEGUIRE IL PRIMO PROGRAMMA C

Sistemi Web per il turismo - lezione 3 -

Le Guide

Istruzioni per l uso di Presenze 2009

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Manuale Sito Videotrend

Università degli Studi di Udine. DLGS 196/03 Gestione delle credenziali di autenticazione informatica

LA PREDISPOSIZIONE DELLA NOTA INTEGRATIVA

Integrazione al Manuale Utente 1

TERNA SRM- Aste On Line Manuale Fornitore

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Sorgenti, Binari e Pacchetti (Compilazione e pacchettizzazione per GNU/Linux)

Ingegneria del Software 1: Eclipse

Manuale del software Supplemento. Comunicazione tra sensore per rilevamento oggetti O2D2xx e Siemens Simatic S / / 2011

Guida per il cittadino

PowerDIP Software gestione presenze del personale aziendale. - Guida all inserimento e gestione dei turni di lavoro -

ISTRUZIONI PER L USO DEL SOFTWARE. PER LA PROGRAMMAZIONE DEI TELECOMANDI Alias

Navigare in Internet Laboratorio di approfondimento la creazione di siti web e/o blog. Marco Torciani. (Seconda lezione) Unitre Pavia a.a.

l'editing delle pagine web non è nella forma ma nella metodologia di costruzione e di pubblicazione.

CAPITOLO V. DATABASE: Il modello relazionale

CERTIFICATI CON TIMBRO DIGITALE MANUALE D USO DEL DECODER 2D-PLUS PER LA VERIFICA DEI CERTIFICATI RILASCIATI DAL COMUNE DI PARMA

Programmazione Orientata agli Oggetti in Linguaggio Java

Guida introduttiva su Eclipse. Ing. Marco Dell'Unto

Il mandato professionale e la formazione del preventivodi massima

VARIABILI LOCALI E GLOBALI (ESTERNE)

Транскрипт:

Compilazione e Makefile

Indice Il preprocessore Le istruzioni per il preprocessore Le MACRO L ambiente linux: alcuni comandi Editor ed il compilatore gcc I makefile Il comando make I flag

Il preprocessore Il processo di compilazione C/C++ comprende diverse fasi: La prima fase viene detta di istruzioni al pre-processore e prevede ad esempio l inclusione di librerie che contengono le definizioni di funzioni usate nel programma. Le direttive al pre-processore sono numerose, e si distinguono nel codice per la presenza del simbolo # all inizio della dichiarazione; noi consideremo solo le principali: #include, #define, #if, #ifndef, #ifdef, #else, #elif, #endif,#undef; insieme con gli operatori: #, ##

#include Questa direttiva forza il compilatore a leggere e compilare un altro codice sorgente Ne esistono due forme a livello di sintassi: #include nome-file #include<nome-file> Distinti convenzionalmente in base la fatto che il file che si vuole includere sia parte dell installazione standard del compilatore (<>) oppure che sia stato creato dall utente ( ). Esempio: #include<stdio.h> #include mia_lib.h

#define Questa direttiva è utilizzata per effettuare macro sostituzioni di parti di codice con altre. La forma generale è data da: #define nome-macro sequenza-di-caratteri /*ad ogni occorrenza nel codice del nome-macro viene sostituita la sequenza-dicaratteri*/ La macro può avere argomenti e in questo caso la macro assomiglia molto ad una funzione. Esempio: #include<stdio.h> #define MYMACRO(a) ((a)<0? -(a) : (a)) int main(){ printf("valore assoluto di -8: %d \n",mymacro(-8)); return 0; } NOTA:L introduzione dell istruzione inline e del qualificatore const a partire dal C99 ha di fatto permesso di soppiantare l uso delle macro definite tramite la direttiva #define tipiche dello standard C89.

#if #ifdef #ifndef #else #elif #endif Questo insieme di direttive è utilizzata per imporre al compilatore delle compilazioni selettive di varie porzioni di codice. L idea generale è la seguente: se l espressione a valle del controllo tramite le istruzioni #if, #ifdefo#ifndefè vera allora il codice compreso tra quel punto e la direttiva di termine (#endif) verrà compilato altrimenti verrà saltato. L uso della direttiva #else è intuitivo. Esempio: #ifndef nome-macro #define nome-macro // #else #endif //

#if #ifdef #ifndef #else #elif #endif Tipico uso ne viene fatto nella scrittura di proprie librerie per evitare di ridefinire le stesse variabili qualora la libreria venisse richiamata da più file nello stesso programma. //nel file header.h #ifndef header_h_ #define header_h_ //codice #endif

#undef Questa direttiva è utilizzata per effettuare la rimozione di macro definite precedentemente La forma generale è data da: Esempio: #define MYLEN 1000 #define MYWIDTH 1000 char array[mylen][mywidth]; #undef MYLEN #undefnome-macro /* la macro MYLEN non esiste più, mentre MYWIDTH continua ad essere definita */

Gli operatori # e ## Questi operatori vengono utilizzati all interno di una #define macro. L operatore # posizionato in una #definemacro impone che l argomento che lo segue sia trasformato in una stringa. #define WARN_IF(EXP) \ do { \ if(exp) printf("warning: " #EXP \n"); \ } while(0) L occorenza: WARN_IF(x == 0); Genera la seguente sostituzione nel sorgente : do { if(x == 0) printf("warning: " "x == 0" "\n"); } while(0);

# e ## L operatore ## è usato per concatenare, in una #definemacro, due argomenti: #include <stdio.h> #define concatena(a,b) a ## b int main() { double hk=12.0; printf(" %f\n",concatena(h,k)); int ab=200; printf(" %d\n",concatena(a,b)); return 0; } /*a livello del pre-processore si ha la sostituzione printf(" %f\n",concatena(h,k)); in printf(" %f\n",hk); */

Compilazione ed esecuzione Per compilare semplici programmi, costituiti da pochi files sorgenti, in generale si utilizza direttamente il compilatore nel modo seguente: Generazioneeseguibiledalla riga di comando della shelldi lavoro tramite i comandi: user@linux>gcc file.c oppure user@linux>gcc o eseguibile.exe file.c Esecuzione codice compilato: user@linux>./a.out oppure user@linux>./eseguibile.exe

Compilazione ed esecuzione Supponendo di disporre di diun programma costituito da: mioprog.h file dichiarativo mioprog.c file di definizioni main.c file di utilizzo le istruzioni per la compilazione del sorgente e la creazione dell eseguibile sono: 1- Compilazione dei sorgenti: gcc-c mioprog.c gcc-c main.c che produce come output i file oggetto mioprog.o e main.o 2- Linking: gcc-o mioexe mioprog.o main.o Oppure unendo compilazione e linking: gcc-o mioexe mioprog.c main.c Le dipendenze tra i file e le specifiche istruzioni di compilazioni vengono solitamente gestite attraverso un Makefile.

Makefile La compilazione di un codice sorgente C è una operazione facilmente automatizzabile perché è ripetitiva. All interno di sistemi operativi UNIX/Linux e talvolta anche DOS, l uso del comando makepermette un controllo delle varie fasi di compilazione semplice ed automatico soprattutto nel caso di codici scritti su più files sorgenti. Un makefile contiene linee di dipendenza(ovvero linee che sintetizzano come un object file dipende da un file sorgente o da file header) e linee di azione(quali tipi di opzioni di compilazioni vanno usate per un certo file) Una linea di dipendenza e la linea d azione relativa insieme costituiscono una regola

Makefile - Esempio Di seguito si ipotizza di avere un programma costituito da 3 files: #-main.c #-func.c #-func.h(incluso da entrambi i file.c) Tutti i 3 files sono presenti nella cartella di lavoro corrente. mioexe: main.o func.o #linea di dipendenza gcc O3 o mioexe main.o func.o #linea di azione main.o: main.c func.h gcc O3 c main.c func.o: func.c func.h gcc O3 -c func.c

Makefile Regole sintattiche Il flag-cnella compilazione ha l'effetto di creare soltanto i file oggetto. Ottenuti i file oggetto, questi si collegano assieme per generare l'eseguibile "mioexe" (l'obiettivo principale). A parte le righe precedute da #che sono righe di commento, ogni riga del file può assumere due formati: -linee di dipendenza. La riga inizia specificando l'obiettivo, subito dopo a seguire il carattere :, si trovano i prerequisiti. Per esempio l'obiettivo finale (il primo specificato) -linee di azione. Ammesso che i prerequisiti siano soddisfatti, nelle righe sono specificati i comandi per il raggiungimento dell'obiettivo. Nel caso presentato ogni obiettivo è seguito da una sola riga di comando, ma potrebbero essere più di una. Tutte le righe di comando cominciano con il Tab. È la presenza di questo carattere che identifica la riga come riga di comando.

Makefile Regole sintattiche Fra due regole deve esserci almeno una linea vuota. Il file deve terminare con un NEWLINE. Esecuzione del Makefile: Il comando per lanciare l esecuzione del Makefile è: make Il comando makedi default si aspetta che nella posizione in cui viene lanciato vi sia un file chiamato Makefile o makefile. Nel caso in cui il Makefileabbia un nome diverso la sintassi è la seguente: make f nome_makefile E possibile eseguire una singola regola nel makefile con la sintassi: make nome_regola make f nome_makefile nome_regola

Makefile - Variabili Può essere comodo usare variabili nella scrittura di makefile qualora si voglia avere diverse opzioni di compilazione da utilizzare in istanti diversi Una volta dichiarate possono essere utilizzate tramite il simbolo: $() #uso due variabili per avere due compilatori diversi CXX=g++ CC=gcc #oppure per passare opzioni (flags) di compilazione CFLG= O3 Wall o3 mioexe: main.o func.o #linea di dipendenza $(CC) O3 o mioexe main.o func.o #linea di azione main.o: main.c func.h $(CC) $(CFLG) main.c func.o: func.c func.h $(CC) $(CFLG) func.c clean: rm *.o

Ambienti Linux e codici C Il pc a vostra disposizione fa uso di linux Aprendo una shelldi lavoro si può creare ed accedere ad uno spazio di lavoro personale tramite i comandi: user@linux> mkdir nome della cartella user@linux> cd nome della cartella in questo spazio inizialmente non vi saranno file: user@linux> ls la [ tr h]

Ambienti Linux e codici C Comando Azione ls la [-tr h] listato ordinato per data dei file contenuti nella cartella di lavoro mkdir myworkdir creazione di una cartella di lavoro cd /path/myworkdir cambio di cartella di lavoro dalla posizione corrente a myworkdir rm nome_file rimozione del file nome_file

Editing Gli editor di testo disponibili sono: -nedit(più semplice ed intuitivo) -emacs(decisamente più potente e complesso) Questi editor riconoscono la sintassi C/C++ e agevolano la lettura del codice grazie all uso dei colori. In ambiente Windows un ottimo compilatore free di tipo visualè il Dev-C++(http://www.bloodshed.net/dev/).