Punto informatico Network
Canali
20091011195959_536691528_20091011195943_1980265020_sl_open.png

Cenni generali sulla compilazione in GNU/Linux

21/05/2010
- A cura di
Linux & Open Source - Probabilmente saper "compilare" qualcosa in sistemi operativi derivanti da UNIX è una delle basi a cui riferirsi per ottenere una vera e propria "raffinazione" e customizzazione dei software installati nel sistema.

Tag

Passa qui con il mouse e visualizza le istruzioni per utilizzare i tag!

compilazione (1) .

Valutazione

  •  
Voto complessivo 4 calcolato su 25 voti

Appendice 5: Parametri aggiuntivi

In fase di invocazione dello script configure è possibile aggiungere dei parametri prima del nome dello script, e saranno ritenuti validi solo per quella invocazione. Quelli che io chiamo "parametri aggiuntivi" non sono altro che variabili di ambiente molto particolari, che influiscono sulla configurazione dei sorgenti, e quindi dei Makefile risultanti.

Per ogni software ne potete vedere una lista invocando

./configure --help | less

Scorrendo l'output fino alla fine molti software hanno una lista di variabili che possono essere influenzate con alcuni parametri speciali [24]. Modificare queste variabili può essere molto utile per localizzare applicazioni, librerie e header installati in directory non standard o per fornire a gcc opzioni non standard. I parametri dichiarati verranno ereditati da tutti i Makefile generati da configure.

Dichiarazioni dei parametri

I parametri sono dichiarati come qualsiasi altra variabile Bash, prima della chiamata completa di configure:

VARIABILE1="valore" VARIABILE2="valore" ... VARIABILEn="valore" ./configure <opzioni>

Il valore può essere incluso tra doppi apici, obbligatoriamente quando contenga degli spazi.

Quando l'ambiente di compilazione sia correttamente installato (ovvero il 99,9% delle volte e in tutte le distribuzioni standard) generalmente le variabili modificabili si limitano a quelle della lista seguente, con alcuni tra i loro valori possibili:

CFLAGS: Fornisce alle invocazioni di gcc opzioni aggiuntive. I più usati riguardano:

  • -jX: rende possibili più task in parallelo; X è il numero di task. Solitamente un valore pari al numero di processori nel sistema più 1 è indicato. Ad esempio, un Core 2 Duo ha due core, ed ogni core è contato come processore distinto, quindi un buon valore è -j3.
  • -OX: (dove O è la lettera "o" maiuscola, non uno zero) è il fattore di ottimizzazione, e X può assumere i valore 0, 1, 2, 3 e s. L'ottimizzazione del codice con O consiste nella trascrizione dei simboli di debug nel codice assemblato: partendo da 0 fino a 3 il numero dei simboli di debug diminuisce, e di conseguenza le dimensioni dell'applicazione compilata. "s" genera un'applicazione di dimensione minore possibile. Più simboli di debug sono presenti nel codice più informazioni di debug vengono fornite all'utente tramite l'uso di strumenti come gdb o valgrind. Nel caso l'opzione O fosse specificata più volte gcc considererà quella più a destra nella riga di comando.
  • -Werror: causa l'interruzione della compilazione se viene incontrato un warning. Equivale ad abilitare --enable-werror con script di configurazione che li supportino.
  • -pipe: abilita l'utilizzo di pipe al posto di file temporanei per la compilazione e la generazione di codice. È consigliata per sistemi GNU, in cui può favorire un sensibile aumento della velocità di compilazione.
  • -Wall: abilita tutti i messaggi di warning standard, tranne -Werror.

LDFLAGS: aggiunge uno o più percorsi in cui risiedono librerie installate in locazioni diverse da quelle standard, in genere /lib, /usr/lib o /usr/local/lib. Per ogni percorso va anteposta l'opzione -L, senza lasciare spazi tra essi.

CPPFLAGS: è molto simile all'uso di LDFLAGS, ma:

  • LDFLAGS punta verso librerie, CPPFLAGS punta verso header;
  • LDFLAGS usa l'opzione -L, CPPFLAGS usa l'opzione -I.

Header standard in distribuzioni GNU/Linux sono sempre installati in /usr/include.

Esempio: CFLAGS

Abilito 3 task in parallelo (ho un dual core), attivo tutti i warning standard, ottimizzazione per dimensione e compilazione tramite pipe, in una configurazione in cui stabilisco che la directory base per l'installazione del software è /usr:

CFLAGS="-j3 -Os -Wall -pipe" ./configure --prefix=/usr

Tutte queste cose sono generalmente non fattibili solamente tramite script di configurazione, e CFLAGS è un buon modo per precisare alcune opzioni "non standard".

Esempio: LDFLAGS

Una libreria fondamentale del software che sto configurando è stata installata in /opt/lib.

LDFLAGS="-L/opt/lib" ./configure

Librerie fondamentali sono installate in /opt/lib e /tmp/lib.

LDFLAGS="-L/opt/lib -L/tmp/lib" ./configure

Esempio: CPPFLAGS

Header non standard sono installati in /tmp/include e /opt/include.

CPPFLAGS="-I/tmp/include -I/opt/include" ./configure

Esempio: combinazione di variabili

Come si può dedurre, più variabili possono essere combinate. Prendiamo gli esempi precedenti e mettiamoli insieme in questo esempio: abbiamo librerie non standard in /tmp/lib e /opt/lib, header non standard in /tmp/include e /opt/include e abilitiamo le opzioni di gcc che abbiamo visto:

CFLAGS="-j3 -Os -pipe -Wall" LDFLAGS="-L/opt/lib -L/tmp/lib" CPPFLAGS="-I/tmp/include -I/opt/include" ./configure

L'importante è ricordare, per non sbagliare, di lasciare almeno uno spazio tra una variabile e l'altra e mettere tutti i valori tra doppi apici.

Pagina successiva
Note
Pagina precedente
Appendice 4: Caricamento di programmi in GNU/Linux

 

Segnala ad un amico

Tuo nome Tuo indirizzo e-mail (opzionale)
Invia a:
    Aggiungi indirizzo email
    Testo

    © Copyright 2019 BlazeMedia srl - P. IVA 14742231005

    • Gen. pagina: 0.25 sec.
    •  | Utenti conn.: 43
    •  | Revisione 2.0.1
    •  | Numero query: 45
    •  | Tempo totale query: 0.07