<!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> è la chiave del processo di compilazione. Nella sua forma più semplice, un Makefile è uno script per la compilazione, o building, dei "binari", le parti eseguibili di un pacchetto. Il Makefile può anche fornire un mezzo per aggiornare un pacchetto software senza dover ricompilare ogni singolo file sorgente in esso, ma questa è 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à è 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ò, generalmente, serve a compilare tutti i file eseguibili necessari per il pacchetto in questione. Tuttavia, make può 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é stampa tutti i comandi che sarebbero attivati da un make, ma senza in effetti eseguirli. <P> <P>Solo i software più semplici usano un Makefile generico. Le installazioni più complesse richiedono un Makefile su misura secondo la posizione delle librerie, dei file include e delle risorse sulla vostra specifica macchina. Questo, in particolare, è 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> è, per citare la pagina di manuale, un "prototipo" di Makefile. L'utilità 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, è presente un file <CODE>Imake</CODE> nella directory base, è 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ù dettagliata analisi della procedura. <P>È 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à probabilmente a dei messaggi d'errore tipo <EM>write access denied</EM> (accesso in scrittura negato), perché 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ò imposta le variabili e definisce le posizioni delle librerie per il compilatore ed il linker. A volte, non ci sarà il file <CODE>Imake</CODE>, ci sarà 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à la procedura di installazione. <P>È 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à 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 è <CODE>/usr/local/bin</CODE>, poiché 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ò, naturalmente, causerà un errore di installazione se la directory in questione non esiste. Il modo più semplice per risolvere questo problema è 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à 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 è 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ù 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ò disabiliterà 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>