Qui affrontiamo la compilazione base di programmi Fortran 77, C e C++, ovvero i comandi
Prima di eseguire la compilazione, e' importante verificare quale compilatore si stia per usare (which cc), poiche' non necessariamente tale compilatore ha tutte le estensioni e opzioni necessarie. Questo e' vero soprattutto per cc, che non su tutte le piattaforme e' compatibile ANSI o POSIX (ad es. su HP-UX) (vedi Opzioni aggiuntive).
Cenni generali
La sintassi generale del comando e'
cc(f77)(CC) [options] input_file
I tre compilatori richiedono che il file da compilare soddisfi alcuni requisiti sull'estensione. Le estensioni piu' usate in HEP che vengono riconosciute dai compilatorisono:
e producono di default un file eseguibile chiamato a.out
L'opzione base per dare un nome al file a.out e' -o, quindi, ad es.
f77 -o mio.exe mio.f
Include files e librerie
In generale, i compilatori chiamano automaticamente il loader
(ld), che si occupa di fare il link.
Gli include e le librerie di sistema, se correttamente configurate, vengono
automaticamente trovate e linked.
Quindi, ad esempio, per compilare un semplice programma C che usi
#include
basta fare
cc -o mio.exe mio.c
Se si devono aggiungere degli include che si trovano in altre directories,
si puo' fare con l'opzione -Idir dove dir e' la directory dove si
trovano gli altri include.
Ad esempio:
f77 -o mio.exe mio.f -I/home/me/includedir
cc -o mio.exe mio.f -I/home/me/includedir -L/home/me/libdir
Quindi, una tipica applicazione potrebbe essere la seguente:
f77 -o mio.exe mio.f -L /usr/lib/X11R5 -L /usr/lib/Motif1.2 -lm -lX11 -lcl -L/cern/97a/lib -lpacklib -lkernlib -lmathlib -lgraflib -lgrafX11 -lX11
Debugging e ottimizzazione
Se si vuole poter lanciare e controllare l'eseguibile
da un debugger, accedendo al contenuto delle sue variabili
e strutture di dati
attraverso la symbol table e' necessario specificarlo con
l'opzione -g.
Quasi tutti i compilatori ottimizzano il codice: a seconda della piattaforma
l'ottimizzazione puo' essere piu' o meno spinta. Comunque, e' possibile
modificarla con l'opzione -Oi dove i
e' un numero intero (0-4) che indica il livello di ottimizzazione.
Ovviamente, -Oi e -g sono mutuamente esclusive.
ANSI
L'essere ANSI o meno del compilatore C dipende dalla piattaforma su cui ci si
trova. Qui di seguito sono riportate le opzioni necessarie per alcune
piattaforme:
compilatori GNU
Per questi compilatori, come per molti altri tool della
GNU, si devono fare delle considerazioni a parte. Sia le opzioni
che le caratteristiche infatti, possono essere diverse da quelle dei compilatori proprietari.
Va notato che comunque i compilatori GNU sono forse i piu' completi
e flessibili.
Le opzioni -Idir, -Llibdir e
-o, come tante altre opzioni di uso normale, sono identiche.
Esistono invece molte opzioni che gli altri compilatori non prevedono; vediamo alcune: