Upload
leduong
View
217
Download
0
Embed Size (px)
Citation preview
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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