Corso di C con Linux

Automake e Autoconf II

 

Terza fase: Creazione del file Makefile.am

Il file Makefile.am deve contenere una lista di assegnamenti per poi essere elaborato nel modo opportuno da automake. Vediamo in questa tabella le variabili pił usate, che possono apparire in Makefile.am:

Tabella 2-5. Macro di Automake

Variabile

Descrizione

LDADD = fileoggetto1.o, fileoggetto2.o, ecc.

Elenca un insieme di file oggetto, che desiderate passare al compilatore per creare file eseguibili.

SUBDIRS=directory 1, directory2, ecc.

Elenca le sottodirectory contenenti i sorgenti, che volete compilare, prima di compilare la directory corrente.

include_HEADERS = header1.h, header2.h, header3.h, ecc..

Include tutti i file header, che volete installare nel sistema al'PREFIX/include', dove PREFIX é di solito '/usr/local'

include_LIBRARIES = lib1.a, lib2.a, lib3.a, ecc..

Include tutti i file di libreria, che volete installare nel sistema al 'PREFIX/lib', dove PREFIX é di solito '/usr/local'

bin_PROGRAMS = eseguibile1, eseguibile2, eseguibile3, ecc..

Elenca tutti i file eseguibili, che volete compilare e installare nel sistema al 'PREFIX/bin', dove PREFIX é di solito '/usr/local'

programma_SOURCES = prog1.c, progr2.c, prog1.h, ecc..

Include tutti i file sorgenti, che volete compilare per creare il file eseguibile programma.

Variabile

Descrizione

Quarta fase: Autoheader e acconfig.h
Il programma autoheader crea un file di direttive #define e #undef per lo script configure esaminando due file: configure.in e acconfig.h. Per quanto riguarda la struttura del primo file ne parleremo pił avanti nel corso di questo paragrafo. Descriviamo ora brevemente il file acconfig.h, che puņ anche non essere presente in progetti di piccole dimensioni.
Il file acconfig.h, utile se usate un file header (*.h) per contenere direttive #define, viene elaborato (se presente) dall'autoheader e puņ avere la seguente struttura:

       /* acconfig.h - used by autoheader to make config.h.in
        *      Copyright (C) 1998 Free Software Foundation, Inc.
        *
        *
         */
       #ifndef PACK_CONFIG_H
       #define PACK_CONFIG_H

       /* need this, because some autoconf tests rely on this (e.g. stpcpy)
        * and it should be used for new programs
        */
       #define _GNU_SOURCE  1

       @TOP@

       #undef M_DEBUG
       #undef M_GUARD
       #undef VERSION
       #undef PACKAGE
       #undef PRINTABLE_OS_NAME
       #undef IS_DEVELOPMENT_VERSION

       /* Define if your locale.h file contains LC_MESSAGES.  */
       #undef HAVE_LC_MESSAGES

       /* Define to 1 if NLS is requested.  */
       #undef ENABLE_NLS

       @BOTTOM@

       #include "mydefine.h"

       #endif


I #define e gli #undef sono direttive al compilatore di cui ora non ci occuperemo. Accentriamo invece la nostra attenzione sulla stringa @TOP@.L'autoheader nel momento in cui trova questa stringa, copia tutte le linee che la precedono nella parte iniziale del file configure.in.h, che é stato elaborato durante la scansione da parte di autoheader del file configure.in. Il programma autoheader svolge una simile procedura, quando incontra la stringa @BOTTOM@, solo che in questo caso l'autoheader copia le linee dopo quella stringa e le pone alla fine del file configure.in.h.

Quinta Fase: Realizzazione dello script configure
Ora abbiamo creato in maniera appropriata i file: configure.in e Makefile.am. Ci resta solo da modificare i sorgenti e includere in essi il seguente spezzone di codice (utile per l'autoconf) all'inizio del primo file, che deve essere compilato:

       #if HAVE_CONFIG
       #include <config.h>
       #endif

Salvate il tutto e ora siamo pronti per generare il nostro file configure, tramite i seguenti comandi:

       cyberspace.org:~$ aclocal
      cyberspace.org:~$ autoconf
      cyberspace.org:~$ autoheader
      cyberspace.org:~$ automake -a

 

Torna all'indice Generale del corso di Corso di C con Linux di Software Planet