Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 1139

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>Building and Installing Software Packages for Linux: Usare make</TITLE>
 <LINK HREF="Software-Building-HOWTO-4.html" REL=next>
 <LINK HREF="Software-Building-HOWTO-2.html" REL=previous>
 <LINK HREF="Software-Building-HOWTO.html#toc3" REL=contents>
</HEAD>
<BODY>
<A HREF="Software-Building-HOWTO-4.html">Avanti</A>
<A HREF="Software-Building-HOWTO-2.html">Indietro</A>
<A HREF="Software-Building-HOWTO.html#toc3">Indice</A>
<HR>
<H2><A NAME="s3">3. Usare make</A></H2>

<P>Il <CODE>Makefile</CODE> &egrave; la chiave del processo di compilazione. Nella
sua forma pi&ugrave; semplice, un Makefile &egrave; uno script per la
compilazione, o building, dei "binari", le parti eseguibili di un pacchetto.
Il Makefile pu&ograve; anche fornire un mezzo per aggiornare un pacchetto
software senza dover ricompilare ogni singolo file sorgente in esso, ma 
questa &egrave; un'altra storia (o un altro articolo).
<P>Ad un certo punto, il Makefile lancia <CODE>cc</CODE> o <CODE>gcc</CODE>. Questo
in realt&agrave; &egrave; un preprocessore, un compilatore C (o C++), ed un
linker, invocati in quell'ordine. Questo processo converte il sorgente nei
binari, i veri eseguibili.
<P>L'invocazione di <EM>make</EM> di solito richiede solo di battere 
<B>make</B>. Ci&ograve;, generalmente, serve a compilare tutti i file
eseguibili necessari per il pacchetto in questione. Tuttavia, make
pu&ograve; svolgere anche altri compiti, come installare i file nelle loro
directory appropriate (<B>make install</B>) e rimuovere i file oggetto 
stantii (<B>make clean</B>). L'esecuzione di <B>make -n</B> permette di
vedere un'anteprima del processo di compilazione, poich&eacute; stampa tutti
i comandi che sarebbero attivati da un make, ma senza in effetti eseguirli.
<P>
<P>Solo i software pi&ugrave; semplici usano un Makefile generico. Le 
installazioni pi&ugrave; complesse richiedono un Makefile su misura secondo 
la posizione delle librerie, dei file include e delle risorse sulla vostra
specifica macchina. Questo, in particolare, &egrave; il caso che si ha quando 
durante il processo di compilazione servono le librerie <CODE>X11</CODE> per 
l'installazione. <EM>Imake</EM> e <EM>xmkmf</EM> adempiono questo compito.
<P>Un <CODE>Imakefile</CODE> &egrave;, per citare la pagina di manuale, un 
"prototipo" di Makefile. L'utilit&agrave; imake costruisce un Makefile adatto 
al vostro sistema dall'Imakefile. Nella maggior parte dei casi, tuttavia, 
preferirete eseguire <B>xmkmf</B>, uno script shell che invoca imake,
un suo front end. Controllate il file README o INSTALL incluso 
nell'archivio per istruzioni specifiche (se, dopo aver estratto
dall'archivio i file sorgenti, &egrave; presente un file <CODE>Imake</CODE> nella
directory base, &egrave; un chiaro segno che dovrebbe essere eseguito
<B>xmkmf</B>). Leggere le pagine di manuale di <CODE>Imake</CODE> e 
<CODE>xmkmf</CODE> per una pi&ugrave; dettagliata analisi della procedura.
<P>&Egrave; bene essere consapevoli che <CODE>xmkmf</CODE> e <CODE>make</CODE> potrebbero
dover essere invocati come root, specialmente nel fare un <B>make install</B>
per spostare i binari sulle directory <CODE>/usr/bin</CODE> o 
<CODE>/usr/local/bin</CODE>. Usare make come utente normale, senza privilegi di
root, porter&agrave; probabilmente a dei messaggi d'errore tipo <EM>write access
denied</EM> (accesso in scrittura negato), perch&eacute; manca il permesso per
la scrittura nelle directory di sistema. Controllate anche che i binari creati 
abbiano i giusti permessi di esecuzione per voi ed ogni altro utente 
appropriato.
<P>Quando viene invocato, <B>xmkmf</B> usa il file <CODE>Imake</CODE> per 
costruire il Makefile appropriato per il vostro sistema. Sarete 
soliti invocare <B>xmkmf</B> con l'argomento <B>-a</B>, per effettuare 
automaticamente <EM>make Makefiles</EM>, <EM>make includes</EM> e 
<EM>make depend</EM>. Ci&ograve; imposta le variabili e definisce le posizioni
delle librerie per il compilatore ed il linker. A volte, non ci
sar&agrave; il file <CODE>Imake</CODE>, ci sar&agrave; invece uno script
<CODE>INSTALL</CODE> o <CODE>configure</CODE>, che dovrebbe essere invocato come
<B>./configure</B> per assicurarsi che venga chiamato il giusto script
<CODE>configure</CODE>. Nella maggior parte dei casi, il file <CODE>README</CODE>
incluso con la distribuzione spiegher&agrave; la procedura di installazione.
<P>&Egrave; di solito una buona idea guardare dentro il <CODE>Makefile</CODE> che
<CODE>xmkmf</CODE>, o uno degli script di installazione, costruiscono. Il
Makefile sar&agrave; di solito adatto per il vostro sistema, ma 
occasionalmente potrebbe essere necessario "ritoccarlo" o correggere 
manualmente degli errori.
<P>
<P>Per installare i binari appena compilati nelle appropriate directory di
sistema di solito basta eseguire, come root, <B>make install</B>.
Solitamente, le directory per i binari del sistema sulle moderne 
distribuzioni Linux sono <CODE>/usr/bin</CODE>, <CODE>/usr/X11R6/bin</CODE>, e
<CODE>/usr/local/bin</CODE>. La directory da preferire per i nuovi pacchetti
&egrave; <CODE>/usr/local/bin</CODE>, poich&eacute; in tal modo si terranno
separati i binari che non fanno parte della installazione Linux originale.
<P>I pacchetti originariamente mirati per versioni commerciali di UNIX
potrebbero provare ad installarsi in <CODE>/opt</CODE> o in un'altra directory
sconosciuta. Ci&ograve;, naturalmente, causer&agrave; un errore di
installazione se la directory in questione non esiste. Il modo
pi&ugrave; semplice per risolvere questo problema &egrave; quello di creare,
come root, una directory <CODE>/opt</CODE>, lasciare che il pacchetto vi si
installi, e poi aggiungere tale directory alla variabile d'ambiente
<CODE>PATH</CODE>. Oppure, potete creare dei link simbolici alla directory
<CODE>/usr/local/bin</CODE>.
<P>La procedura di installazione generale sar&agrave; quindi:
<UL>
<LI>Leggere il file <CODE>README</CODE> ed altri file di documentazione 
appropriati.</LI>
<LI>Eseguire <B>xmkmf -a</B>, o lo script <CODE>INSTALL</CODE> o 
<CODE>configure</CODE>.</LI>
<LI>Controllare il <CODE>Makefile</CODE>.</LI>
<LI>Se necessario, eseguire <B>make clean</B>, <B>make Makefiles</B>,   
<B>make includes</B>, e <B>make depend</B>.</LI>
<LI>Eseguire <B>make</B>.</LI>
<LI>Controllare i permessi.</LI>
<LI>Se necessario, eseguire <B>make install</B>.</LI>
</UL>
<P>
<P><EM>Note:</EM>
<P>
<UL>
<LI>Normalmente non si compilano i pacchetti come root. L'effettuare un
<B>su</B> a root &egrave; necessario solo per installare i binari compilati
nelle directory di sistema.
</LI>
<LI>Una volta che avete preso confidenza con <EM>make</EM> e col suo uso,
potreste volere che vengano aggiunte nel <CODE>Makefile</CODE> standard
incluso nel  (o creato col) pacchetto che state installando delle
opzioni di ottimizzazione aggiuntive. Alcune di tali opzioni, le pi&ugrave; usate, sono <EM>-O2</EM>,
<EM>-fomit-frame-pointer</EM>, <EM>-funroll-loops</EM> e <EM>-mpentium</EM>
(se usate un processore Pentium). Siate cauti e fatevi guidare dal buon senso
quando modificate un <CODE>Makefile</CODE>!
</LI>
<LI>Dopo che <EM>make</EM> ha creato i binari, potreste voler usare 
<B>strip</B> su essi. Il comando <B>strip</B> elimina dai file binari le
informazioni per il debugging simbolico e ne riduce la dimensione, spesso 
drasticamente. Ovviamente ci&ograve; disabiliter&agrave; il debugging.
</LI>
<LI>Il 
<A HREF="http://sunsite.auc.dk/pack/">Pack Distribution Project</A> utilizza un diverso approccio per la creazione di archivi di 
pacchetti software, basato su un insieme di strumenti scritti in Python per
la gestione di link simbolici a file installati in <EM>directory di 
raccolta</EM> separate. Questi archivi sono degli ordinari <EM>pacchetti 
tar</EM>, ma si installano nelle directory <CODE>/coll</CODE> e <CODE>/pack</CODE>. 
Potreste dover scaricare il <EM>Pack-Collection</EM> dal suddetto sito
qualora vi capiti di imbattervi in una di tali distribuzioni.</LI>
</UL>
<P>
<P>
<P>
<HR>
<A HREF="Software-Building-HOWTO-4.html">Avanti</A>
<A HREF="Software-Building-HOWTO-2.html">Indietro</A>
<A HREF="Software-Building-HOWTO.html#toc3">Indice</A>
</BODY>
</HTML>