CFLAGS e CXXFLAGS

Le variabili CFLAGS e CXXFLAGS definiscono le opzioni di ottimizzazione per i compilatori C e C++ rispettivamente di gcc. Anche se qui vengono definite in generale, le massime performance si ottengono quando si impostano le variabili per ogni programma separatamente perchè ogni programma è differente.

In make.conf si dovrebbero definire le impostazioni di ottimizzazione che si ritiene possano rendere il sistema più reattivo in generale. Non mettere impostazioni sperimentali in questa variabile; troppa ottimizzazione può far funzionare male i programmi (crash, o peggio ancora, malfunzionamento).

Non vengono spiegate tutte le possibili opzioni di ottimizzazione. Chi volesse conoscerle, legga il Manuale Online GNU o la pagina di informazioni gcc (info gcc -- funziona solo su un sistema Linux). Lo stesso file make.conf.example contiene molti esempi e informazioni da consultare.

Una prima impostazione è la flag -march=, che specifica il nome dell'architettura. Le possibili opzioni sono descritte nel file make.conf.example (come commenti). Per esempio, per l'architettura x86 Athlon XP:

Esempio 16.2. Impostazione della flag march di GCC

 

# Gli utenti AMD64 che desiderino avere un sistema 64 bit nativo dovrebbero utilizzare -march=k8
# gli utenti EM64T utilizzino -march=nocona
-march=athlon-xp

Una seconda impostazione è la flag -O (o maiuscola, non zero), che specifica la classe di ottimizzazione di gcc. Possibili classi sono s (per ottimizzazioni di formato), O (per nessuna ottimizzazione), 1, 2 o 3 per più ottimizzazioni di velocità (ogni classe ha le stesse flag di quella precedente, più alcuni extra). Per esempio, per una ottimizzazione di classe 2:

Esempio 16.3. L'impostazione O di GCC

 

-O2

Altre flag di ottimizzazione molto usate sono -pipe (si usa pipe piuttosto che i file temporanei, per la comunicazione tra i vari stage di compilazione).

L'utilizzo di -fomit-frame-pointer (che non tiene il puntatore al frame per funzioni che non ne hanno bisogno) potrebbe avere serie ripercussioni nel caso sia necessario effettuare il debug dell'applicazione.

Quando si definiscono CFLAGS e CXXFLAGS, si dovrebbero mettere insieme molte flag di ottimizzazione, come nel seguente esempio:

Esempio 16.4. Definizione delle variabili CFLAGS e CXXFLAGS

 

CFLAGS="-march=athlon-xp -pipe -O2" # Gli utenti AMD64 utilizzano -march=k8
# gli utenti EM64T utilizzino -march=nocona
CXXFLAGS="${CFLAGS}" # Usare le stesse impostazioni per entrambe le variabili