53
Strumenti per la compilazione Documentazione e gestione dei sorgenti Strumenti per la programmazione C++ in Linux g++, make, doxygen, cvs Francesco Versaci webmonster --apud-- apf.it MontelLUG Montebelluna Linux User Group Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

  • Upload
    leduong

  • View
    217

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

Strumenti per la programmazione C++ in Linuxg++, make, doxygen, cvs

Francesco Versaciwebmonster --apud-- apf.it

MontelLUGMontebelluna Linux User Group

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 2: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

Licenza d’utilizzo

Copyright c© 2005, Francesco Versaci.Questo documento viene rilasciato secondo i termini della licenza Creative Commons(http://creativecommons.org).L’utente e libero di:

distribuire, comunicare al pubblico, rappresentare o esporre inpubblico la presente opera

alle seguenti condizioni:

Attribuzione Deve riconoscere la paternita dell’opera all’autore originario.

Non commerciale Non puo utilizzare quest’opera per scopi commerciali.

No opere derivate Non puo alterare, trasformare o sviluppare quest’opera.

In occasione di ogni atto di riutilizzazione o distribuzione, deve chiarire agli altri itermini della licenza di quest’opera.Se ottiene il permesso dal titolare del diritto d’autore, e possibile rinunciare a ciascunadi queste condizioni. Le utilizzazioni libere e gli altri diritti non sono in nessun modolimitati da quanto sopra. Questo e un riassunto in lingua corrente dei concetti chiavedella licenza completa (codice legale), reperibile sul sito Internethttp://creativecommons.org/licenses/by-nc-nd/2.0/legalcode

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 3: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

Cosa vedremo?

Strumenti per la compilazione

g++ Il compilatore C++ della GNU

make Per automatizzare la compilazione (e altro)

Documentazione e gestione dei sorgenti

doxygen Per automatizzare la documentazione dei sorgenti

cvs Per gestire e condividere gli archivi di sorgenti

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 4: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

g++ – Panoramica

Passi per la creazione dell’eseguibile

preprocessing Vengono espanse le macro(fra cui le direttive #include )

compilation Il sorgente viene convertito inlinguaggio assembly

assembling Dall’assembly al linguaggiomacchina

linking Si uniscono i vari pezzi performare l’eseguibile finale

runtime Vengono caricate in memoriale eventuali librerie condivise

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 5: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

g++ – Opzioni globali

Estensioni riconosciute

Le estensioni riconosciute dal compilatore come file C++ sonole seguenti:

header .h

codice .cc .C .cpp .cxx .cp

Opzioni per l’outputg++ [-c] [-o output] nome.cc

-c Compila senza collegare, non crea l’eseguibile

-o nomeoutput Chiama il file di uscita “nomeoutput”

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 6: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

g++ – Esempio di compilazione base 1/2

saluti.h

# i fnde f SALUTI H#define SALUTI H

#include <iostream>using namespace s td ;

void c iao ( ) ;

#endi f

saluti.cc

#include ” s a l u t i . h ”void c iao ( ) {

cout << ” c iao !\n ” ;}

test.cc

#include ” s a l u t i . h ”i n t main ( ){

c iao ( ) ;return 0;

}

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 7: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

g++ – Esempio di compilazione base 2/2

g++ -c saluti.ccg++ -c test.ccg++ -o runme saluti.o test.o./runmeciao!

Spiegazione

I primi due comandi compilano i file sorgenti creando i fileoggetto .o .

Il terzo li collega creando l’eseguibile runme , lanciato allaquarta riga.

Le prime tre righe si sarebbero potute sostituire con questa:g++ -o runme saluti.cc test.cc

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 8: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

g++ – Opzione di avviso

Queste opzioni segnalano in fase di compilazione delleprobabile sviste del programmatore che non danno errori incompilazione.E consigliabile usarle sempre.

Warnings

-Wall Abilita molti avvisi utili (variabili usate senzainizializzazione, classi polimorfe senza distruttorevirtuale, ecc.)

-pedantic Avvisa se si devia dallo standard ISO

-W (-Wextra) Abilita altri avvisi (confronto di unsigned con 0,funzioni che possono o meno restituire un valore,ecc.)

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 9: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

g++ – Opzioni di debug

Le seguenti opzioni generano dati aggiuntivi per facilitare illavoro a debugger e analizzatori vari.

Debug

-g Crea informazioni per debug per vari programmi

-ggdb Crea informazioni per debug con gdb

-pg Crea informazioni per gprof

-fprofile-arcs Registra le svolte prese nei salti condizionali,usato da gcov

-ftest-coverage Altre informazioni usate da gcov

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 10: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

g++ – Opzioni di ottimizzazione

Il g++ puo utilizzare diverse tecniche per ottimizzarel’eseguibile prodotto.

Opzioni per l’ottimizzazione

-01 Ottimizza salti condizionali e cicli, prova aeliminare alcuni if, srotola i cicli, . . .

-02 Ottimizza l’uso di sottoespressioni, riordina ilcodice minimizzando i salti, . . .

-03 Rende inline le funzioni piccole, . . .

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 11: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

g++ – Scelta dell’architettura

Il compilatore permette inoltre di scegliere il codice assemblyda produrre per specifici processori.Quelli disponibili per i pc di casa sono i seguenti:

Architetture x86 disponibili

-march=cpu-type dove “cpu-type” e scelto frai seguenti:i386, i486, i586, i686, pentium, pentium-mmx,pentiumpro, pentium2, pentium3 pentium4,prescott, nocona, k6, k6-2, k6-3, athlon,athlon-tbird, athlon-4, athlon-xp, athlon-mp,winchip-c6, winchip2 e c3

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 12: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

g++ – Opzioni di preprocessing

Le seguenti opzioni riguardano l’uso degli header.

Architetture x86 disponibili

-Idir Aggiunge la directory “dir” al percorso di ricercadegli header

-MM Produce in output le dipendenze dei file da inserirenel MakefilePer esempio:

g++ -MM *.ccsaluti.o: saluti.cc saluti.htest.o: test.cc saluti.h

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 13: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

g++ – Il collegamento

Opzioni di linking

-lnome Usa la libreria esterna“nome”

-Ldir Cerca le librerie nelledirectory “dir”

-shared Crea un file oggettocondiviso, da usarecome libreria dinamica

-static Collega tutte le librerie inmodo statico (anche lecondivise)

-s Togli la tavola dei simbolidall’eseguibile

Il comando ldconfig

Il linker guarda di defaultnelle directory di sistema(/lib, /usr/lib). Se sivogliono aggiungere altredirectory senzaspecificarle ogni volta colparametro -L enecessario aggiungerlenel file/etc/ld.so.conf elanciare il comandoldconfig

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 14: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

g++ – Compilazione con libreria esterna

test.cc

#include <gmpxx . h>#include <iostream>using namespace s td ;

i n t main ( ) {mpq class a ( ” 2/5 ” ) ;

cout << a∗a << endl ;

return 0;}

Compilazioneg++ -o runme test.cc -lgmp -lgmpxx./runme4/25

Per usare una libreria esterna enecessario installare il pacchetto congli header (libqualcosa-dev), includerel’header e dichiarare al linker in qualilibrerie recuperare gli oggetti (si vedail manuale della libreria usata).

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 15: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

make – Panoramica

Per automatizzare la compilazione dei sorgenti lo strumentostandard e il make. Noi analizzeremo la versione GNU diquesto programma.

Il Makefile

In ogni directory che contienesorgenti e necessario creare unfile di testo, chiamato Makefile,che contiene le istruzioni per lacompilazione.

Come avviare la compilazione

Una volta creato il Makefile esufficiente lanciare il comandomake (o make obiettivo )per avviare la compilazione.

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 16: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

make – Regole

Sintassi delle regole

obiettivo: prerequisiticomando1comando2...

Spiegazione

obiettivo Il file da creare

prerequisiti I file che servonoper crearlo

comando I comandi (si noti iltab obbligatorio)per crearel’obiettivo

Cosa fa il make?

Controlla se qualcuno frai prerequisiti e stato modificato piurecentemente dell’obiettivo. In caso affermativo esegue icomandi.

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 17: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

make – Un esempio banale

Makefile

grosso.txt: piccolo1.txt piccolo2.txtcat piccolo1.txt piccolo2.txt > grosso.txt

Il comando make grosso.txt controlla che il file grosso.txtnon esista oppure sia piu vecchio dei file piccolo1.txt epiccolo2.txt. Quindi esegue il comando cat che crea il filegrosso.txt.Nel caso l’obiettivo sia gia aggiornato make notifica la cosa conla seguente stringa:

make: ’grosso.txt’ is up to date.

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 18: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

make – Phony targets

Spesso e comodo poter creare dei comandi svincolati daparticolari file. Si usano allora degli obiettivi phony.

Makefile.PHONY: cleanclean:

rm *.o

Spiegazione

Eseguire il comando makeclean e equivalente adeseguire rm *.o

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 19: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

make – Variabili

Nei Makefile e possibile utilizzare delle variabili per evitare diriscrivere piu volte gli stessi comandi.

MakefileCXXFLAGS = -Wall -W -pedantictest.o : test.cc

g++ $(CXXFLAGS) -c test.ccsaluti.o : test.cc

g++ $(CXXFLAGS) -c saluti.cc

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 20: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

make – Regole implicite e variabili automatiche

Spesso si deve eseguire lo stesso comando su piu file.

Makefile

CXXFLAGS = -Wall -W -pedantic%.o : %.cc

g++ $(CXXFLAGS) -c -o $@ $<

Regole implicite

La seconda riga fornisce unaregola per trasformarequalunque file .cc in un file .o

Variabili automatiche

$@ Bersaglio

$< Primo prerequisito

$ Tutti i prerequisiti

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 21: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

make – Inclusione di altri file

E possibile includere altri file nel Makefile, cosa molto utile perincludere file generati automaticamente.

Makefiledep.mk: *.cc *.h

g++ -MM *.cc > dep.mk

include dep.mk

Spiegazione

Il file dep.mk viene rigenerato ogni volta che si modifica un filesorgente. Viene incluso ad ogni make per fornire le dipendenzedei file.

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 22: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

make – Un esempio completo

CXXFLAGS = -Wall -W -pedantic

%.o : %.ccg++ $(CXXFLAGS) -o $@ -c $<

runme : test.o saluti.og++ $(CXXFLAGS) -o $@ $ˆ

dep.mk : *.cc *.hg++ -MM *.cc > dep.mk

include dep.mk

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 23: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

g++make

make – Un esempio ricorsivo

# elenco directory in cui eseguire il makeDIRS = dir1 dir2 dir3 \

dir4 dir5 dir6

# esegui make in tutte le directory.PHONY: all $(DIRS)

all: $(DIRS)@echo ’Fatto!’

$(DIRS):$(MAKE) -C $@

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 24: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

doxygen – Panoramica

E uno strumento di documentazione per codice C/C++ e simili.

Come funziona?

Si crea un file diconfigurazione

Si commenta direttamenteil codice (con unasemplicissima sintassi)

Si esegue il comandodoxygen

Documentazione prodotta

La documentazione si puogenerare nei formati html,LATEX, pdf, ps e rtf.

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 25: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

doxygen – Configurazione

Doxyfile

Il file di configurazione,chiamato tipicamente Doxyfile,regola le diverse impostazioni(linguaggio, lingua, formati didocumentazioni da produrrecon le diverse opzioni, . . . ).Per creare un file di esempio,da modificare poi con un editor,basta digitare il comandodoxygen -g .

doxywizard

Per i pigri esiste anche unfrontend grafico che permettedi configurare tutto da simpaticimenu.

Creare la documentazione

Una volta creato il file diconfigurazione e commentati isorgenti basta lanciare ilcomando doxygen perche sicrei una directory docscontenente la documentazione.

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 26: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

doxygen – Commenti alle classi

mucca.h

/ / / Una mucca/∗ ∗∗ Simpat ica mammifera e rb i vo ra∗ p r o d u t t r i c e d i l a t t e∗ /

class Mucca{pr iva te :

i n t q u a n t i t a l a t t e ; / / /< scor te d i s p o n i b i l ipubl ic :

/ / / mungi un po ’ d i l a t t evoid mungi ( i n t l i t r i l a t t e ) ;/ / / mangia un po ’ d ’ erbavoid mangia ( i n t kg erba ) ;

} ;

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 27: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

doxygen – Documentare una funzione membro

C’e una sintassi particolare per commentare i parametri dellefunzioni:

Esempio

/ / / Si in forma su i g u s t i d e l l a mucca/∗ ∗

∗ \param nome erba I l nome d e l l ’ erba∗ \ r e t u r n Si ’ o no?∗ /

bool t i p i a c e ( s t r i n g nome erba ) ;

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 28: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

doxygen – Documentazione fuori dalle classi

head.h

/∗ ∗ \ f i l e head . h∗ \ b r i e f Qualche d e f i n i z i o n e∗ /

/∗ ∗ \var typedef vector<i n t > v i n t ;∗ \ b r i e f Ve t to re d i i n t e r i∗ /

typedef vector<in t > v i n t ;

/∗ ∗ \ fn vo id sa lu ta ( s t r i n g nome ) ;∗ \ b r i e f Saluta i conoscent i∗ \param nome I l nome d e l l ’ amico∗ /

void sa lu ta ( s t r i n g nome ) ;

Spiegazione

Per commentare cosefuori dalle classi enecessario innanzituttoaggiungere uncommento al file header.Poi si possonoaggiungere i commentiper le singole funzioni,variabili, ecc.

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 29: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

doxygen – Cosa produce il doxygen ?

Interfacce

Viene creata una pagina perogni classe, con le descrizionidei relativi membri.

Diagrammi ereditarieta

Il doxygen genera anche deidiagrammi che illustrano lerelazioni di ereditarieta.

Indici

Il documento prodotto contieneindici di classi, funzioni, header,esempi, ecc.

Link

Nel caso il formato d’output loconsenta vengono creati linkalle definizioni ogni volta chesia possibile.

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 30: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Panoramica

Il cvs e uno strumento per gestire archivi di sorgenti

Concorrenza

E studiato per affrontare iproblemi di concorrenza chepossono derivare da modifichecontemporanee di diversisviluppatori

Accessibilita

Si puo installare come serversu una porta tcp ed essereaccessibile in internet

Versioni e ramificazioni

Gestisce ramificazioni e fusionidi diverse versioni dei sorgenti.Mantiene in archivio tutte lemodifiche fatte, per poterlerivedere ed eventualmentecorreggere.

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 31: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Creazione del repository

init

Per creare un archivio e necessarioscegliere una directory (per es./var/lib/cvs ) scrivibiledall’amministratore del cvs e dare ilcomando:$cvs -d /var/lib/cvs initche creera la cartella/var/lib/cvs/CVSROOT contenente i filedi configurazione, che andranno modificati(quasi tutti) usando il cvs stesso.

Debian

In Debianl’inizializzazionedell’archivio e disolito fattaautomaticamente(dietro richiesta) infase diinstallazione.

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 32: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Creazione di un progetto

import

Per inserire un nuovo progetto e sufficiente entrare nelladirectory contenente i sorgenti (o vuota se il progetto e nuovo)e lanciare il comando:cvs -d /var/lib/cvs import dir_repositorynome_autore tag_versionePer es.cvs -d /var/lib/cvs import gnu/gcc gnu startcreera una directory /var/lib/cvs/gnu/gcc contenente il progettogcc e associera il tag start a tutti i file importati, in modo dapoterli identificare con un nome.

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 33: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Richiesta dei sorgenti

checkout

Per scaricare una copia locale di un progetto si usa il comando:cvs -d /var/lib/cvs co progettoche crea una directory progetto contenente l’ultima versionedei sorgenti.Lo sviluppatore modifichera la copia locale e quando avraapportato le modifiche le propaghera nel repository centrale.

CVSROOT

Impostando la variabile d’ambiente CVSROOT non c’e bisognodi specificare ogni volta il parametro -d /var/lib/cvs :export CVSROOT=/var/lib/cvs

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 34: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Aggiunta e rimozione di file

add

Per aggiungere un file al repository e necessario innanzituttocreare il file localmente e poi dare il seguente comando:cvs add files...Il file non viene aggiunto subito al repository remoto, ma vienesolo schedulato.

rm

Per rimuovere un file si procede in modo simile: prima sicancella localmente, poi si schedula la rimozione:cvs rm [files]Si possono anche fare le due cose con un solo comando:cvs rm -f files...

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 35: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Modifica dei sorgenti

update

Dopo aver lavorato sulla copialocale si puo vedere quali file sisiano modificati e quali sianostati creati (andranno aggiuntiesplicitamente all’archivio). Ilcomando da dare e:cvs up [files]Il comando update serveanche a rigenerare i file chesono stati cancellati.

Esempio

cvs add Makefilecvs rm -f test.ccvim access.cccvs upcvs update: Updating .M access.ccA MakefileR test.cc

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 36: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Propagazione delle modifiche

commit

Quando si e convinti delle modifiche che si sono fatte e chesono state rilevate dall’update si puo concludere la sessioneaggiornando l’archivio centrale nel seguente modo:cvs ci [files]In seguito al lancio del comando si apre un editor in cui scrivereuna nota su cio che si e modificato. Alternativamente si puospecificare con il parametro -m ’nota cambiamento’ .

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 37: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Risoluzione dei conflitti

Gestione dei conflitti

Puo succedere che qualcun altro abbiamodificato il file su cui stiamo lavorando epropagato le modifiche prima di noi. Inquesto caso al momento dell’update lemodifiche, se riguardano righe diverse delfile, vengono fuse tranquillamente nellacopia locale.Se invece ci sono dei conflitti vengonoscritte nella copia locale entrambe leversioni, lasciando allo sviluppatore la sceltasu quale tenere (cancellando l’altra).

Cervisia

Possono esseremolto comodi perla risoluzione deiconflitti dei toolsgrafici, quali adesempio il cervisiao il gcvs.

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 38: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Esempio di conflitto

Versione 1

#include <iostream>using namespace s td ;i n t main ( ){

cout << ” Buongiorno\n ” ;return 0;

}

Versione 2

#include <iostream>using namespace s td ;i n t main ( ){

cout << ” Buonasera\n ” ;return 0;

}

Versione fusa

#include <iostream>using namespace std ;i n t main ( ){

<<<<<<< main . cccout << ” Buongiorno\n ” ;

=======cout << ” Buonasera\n ” ;

>>>>>>> 1.4return 0;

}

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 39: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Gestione delle versioni

tag

Per assegnare un nome ad una versione si usa il comando tag:cvs tag nome-release

Uso dei nomi simbolici

Il nome assegnato si puo usare per distinguere le diverseversioni di un programma:cvs co -r nome-release nome-progettocvs up -r nome-release

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 40: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Ramificazione

E spesso utile ramificare i sorgenti, per es. per continuare amantenere una vecchia versione stabile di un programmamentre si continua a sviluppare quella instabile.

Creare una ramificazione

Il comando per creare una nuova ramificazione e:cvs tag -b nome-branch

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 41: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Fusione fra versioni

Se si mantiene una versione sperimentale dei sorgenti puoessere utile fondere le modifiche nella versione stabile.

Fusione

Se la ramificazione sperimentale si chiama test-branch-1, perpropagare le modifiche nella versione a cui si lavora esufficiente dare il seguente comando:cvs up -j test-branch-1Lo sviluppatore viene avvisato delle fusioni fatte e deglieventuali conflitti.

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 42: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Visione dei sorgenti

export

Per visualizzare i sorgenti senza volerli modificare si usa ilcomando export:cvs export -r nome-releaseoppurecvs export -D datadove data puo essere anche “now”.

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 43: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Confronto fra diverse versioni

diff

Per visualizzare le differenze fra diverse versioni di un file si usail comando:cvs diff -r nome-release nome-fileAnche in questo caso puo essere molto comodo usare un toolgrafico come cervisia, gcvs o cvsmgdiff.

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 44: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Repository remoti con account di sistema

RSH

Per collegarsi ad un repository remoto ospitato in un server sucui si possiede un account si puo usare l’rsh, nel seguentemodo:cvs -d :ext:utente@server:/var/lib/cvs co progetto

SSH

Per specificare una diversa shell remota si puo impostare lavariabile d’ambiente CVS RSH:export CVS_RSH=/usr/bin/ssh

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 45: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Repository senza account di sistema – 1/2

PSERVER

Per non dare un account di sistema ad ogni sviluppatore il cvsfornisce un sistema di autenticazione autonomo: il pserver.

Configurazione

/etc/services Si aggiungono le seguenti righe:

cvspserver 2401/tcpcvspserver 2401/udp

/etc/inetd.conf Si aggiunge la riga:

cvspserver stream tcp nowaitroot /usr/sbin/tcpd cvs -f--allow-root=/var/lib/cvs pserver

Debian La configurazione viene fatta automaticamente

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 46: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Repository senza account di sistema – 2/2

CVSROOT/config

Per disabilitare l’autenticazione di sistemaaggiungere SystemAuth=no . In Debian enecessario disabilitare anchel’autenticazione PAM: PamAuth=no

CVSROOT/passwd

Contiene gli utenti che hanno accesso alrepository, l’hash delle loro password el’utente di sistema che useranno peraccedere all’archivio.

anonymous::cvsusermelissa:tGX1fS8sun6rY:cvsuser

CVSROOT/writers

Contiene la listadegli utenti chehanno permessodi scritturasull’archivio

makepasswd

Per generarel’hash dellepassword si puousare il pacchettomakepasswd

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 47: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Permessi di accesso ai progetti

Per poter accedere ad un progetto l’utente di sistema cherappresenta l’utente cvs deve avere permessi di scrittura nelladirectory del repository del progetto.E quindi in generale buona cosa restringere l’accesso alladirectory CVSROOT.

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 48: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Sessione di esempio pserver

export CVSROOT=:pserver:utente@server:/var/lib/cvscvs logincvs co progetto...cvs upcvs cicvs logout

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 49: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – pserver su tunnel SSL – 1/3

Il brutto del pserver e che passa le password in chiaro.

Stunnel4 su Debian – Server – 1/2apt-get install stunnel4

Eseguire tutte le procedure descritte in/usr/share/doc/stunnel4/README.Debian

Aggiungere al file /etc/services la riga:cvspservers 22401/tcp

update-inetd --add ’cvspservers stream tcpnowait root /usr/sbin/stunnel4 stunnel4/etc/stunnel/stunnel-cvs’

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 50: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – pserver su tunnel SSL – 2/3

Stunnel4 su Debian – Server – 2/2

Rinominare /etc/stunnel/stunnel.conf instunnel-cvs

Impostare in stunnel-cvs le variabili cert e key colcertificato creato prima

Impostare client=no

Togliere tutti i servizi e aggiungere le righe:exec=/usr/sbin/tcpdexecargs=/usr/sbin/cvs-pserver

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 51: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – pserver su tunnel SSL – 3/3

Stunnel4 su Debian – Client

Editare /etc/default/stunnel4 impostando ENABLE=1

Editare il file /etc/stunnel/stunnel.conf e aggiungere ilservizio:[cvspservers]accept = 2401connect = server-remoto:22401

/etc/init.d/stunnel4 restart

A questo punto si puo usare il cvs come se fosse installatolocalmente:exportCVSROOT=:pserver:utente@localhost:/var/lib/cvscvs login...

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 52: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

doxygencvs

cvs – Tools aggiuntivi

cvsutils

Permettono di effettuare alcune operazioni senza accedere allarepository remoto.

cvsu Simula l’update in locale

cvschroot Permette di cambiare al volo il repository

cvspurge Elimina i file non nel repository (risultati dellacompilazione, . . . )

cvsdo Simula i comandi cvs in locale

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux

Page 53: Strumenti per la programmazione C++ in Linux · LATEX, pdf, ps e rtf. Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux. Strumenti per la compilazione

Strumenti per la compilazioneDocumentazione e gestione dei sorgenti

Letture consigliate per approfondire. . .

R. Stallmann, Comunita sviluppatori GCCUsing the Gnu Compiler Collectioninfo gcc

Autori variManuale makeinfo make

Dimitri van HeeschManuale doxygen/usr/share/doc/doxygen/html/index.html

Roland Pesch e altriManuale cvsinfo cvs

Francesco Versaci webmonster --apud-- apf.it Strumenti per la programmazione C++ in Linux