Documente Academic
Documente Profesional
Documente Cultură
http://plagatux.es
ist or est jo un lieni eonoimientoExo omeril PFS isp de gretive gommonsF r ver un opi de est lieniD visite httpXGGretiveommonsForgGliensesGyE nGPFSGesG o envie un rt gretive gommonsD IUI eond treetD uite QHHD n prnE isoD gliforni WRIHSD eF sted es lire deX
ReconocimientoF hee reonoer los rditos de l or de l mner espei(d por el utor o el lienidor @pero no de un mner que sugier que tiene su poyo o poyn el uso que he de su orAF Compartir bajo la misma licenciaF i lter o trnsform est
orD o gener un or derivdD slo puede distriuir l or generd jo un lieni idnti stF
el reutilizr o distriuir l orD tiene que her refereni l utor y l sitio e del utorF el reutilizr o distriuir l orD tiene que dejr ien lro los trminos de l lieni de est orF elgun de ests ondiiones puede no plirse si se otiene el permiso del titulr de los derehos de utor xd en est lieni menos o restringe los derehos morles del utorF vs fuentes en utilizds pr relizr este doumento son ls siguientesX httpXGGwwwFlrdeFepitFfrG dlGutotoolsFhtml httpXGGwwwFgnuForgGsoftwreGutoonfGmnulG httpXGGwwwFgnuForgGsoftwreGutomkeGmnulG httpXGGwwwFgnuForgGsoftwreGlitoolGmnulG httpXGGwwwFioinfFuniEfreiurgFdeGmmnnGrowoGutomkeFhtml5doxteps
ndice general
1. Introduccin IFIF Autoconf F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IFPF Automake F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IFQF Libtool F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F 2. Ejemplo sencillo: HelloWorld!
PFIF gontenido sio F F F PFIFIF gon(gureF F F PFIFPF wke(leFm F F PFIFQF srGwke(leFm PFIFRF srGminF F F F PFPF reprndo el pquete F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F
P Q Q
4
S S S S S S
F F F F F F F F rello orld F F F F F F F F F F F F F F F F F F F F F F F F
V W W IH IH
4. Usando Autoconf
RFIF v estrutur de congure.ac F F F F RFIFIF reludio F F F F F F F F F F F F RFIFPF gomproiones de progrms RFIFQF wros de in de Autoconf RFIFRF gomproiones de lirers F RFIFSF gomproiones de eers RFIFTF gomndos de slid F F F F F F RFPF hesuriendo wR F F F F F F F F F F F
12
IP IP IQ IQ IR IR IR IS
IT IU IV IV IV
F F F F
F F F F
F F F F
F F F F
F F F F
F F F F
F F F F
F F F F
F F F F
F F F F
F F F F
F F F F
F F F F
F F F F
F F F F
F F F F
F F F F F F F F F F
F F F F F F F F F F
F F F F F F F F F F
F F F F F F F F F F
F F F F F F F F F F
F F F F F F F F F F
F F F F F F F F F F
F F F F F F F F F F
F F F F F F F F F F
F F F F F F F F F F
F F F F F F F F F F
F F F F F F F F F F
IW IW IW PH
6. Libtool
TFIF virers omprtidsX n in(erno pr l portilidd TFPF gon(gurndo Libtool F F F F F F F F F F F F F F F F F F F TFPFIF n hello world3 on Libtool F F F F F F F F F F F TFQF gontruyendo lirers esttis o dinmis F F F F F F F TFRF vos progrms son relmente sripts F F F F F F F F F F TFSF ersionndo ls lirers F F F F F F F F F F F F F F F F F
21
PI PI PP PQ PQ PQ
25
Captulo 1
Introduccin
hesde IWWI lgunos desrrolldores de qx trjn en l elorin de iertos sripts pr filitr l vid los desrrolldores de pquetes softwre qxF il onjunto de tods ests herrmients es onoido omo AutotoolsF hesde entones el sript configure es de uso oligtorio en ulquier pquete del proyeto qxF
pigur IFIX lids de l ejeuin de on(gure il sript configure prue el sistem pr el onjunto de funionesD lirers y herrE mients requeridsF gundo se ejeut gener un (hero cong.h on todos los #denes y (heros Makele pr onstruir el pquete @ver (g IFIAF odo esto se reliz pr que el proedimiento de instlin de estos pquetes pr el usurio (nl se tn simple omo ejeutr los siguientes omndosX
~ % tar zxf paquete.tar.gz ~ % cd paquete ~/paquete % ./configure ... ~/paquete % make ... ~/paquete % sudo make install ...
qris l uso de ls Autotools se simpli( tnto el trjo de los usurios omo el de los mntenedores o desrrolldores de los pquetesF gon l simple ejeuin del omndo make dist se re el pquete del proyeto softwre pr poder ser redistriuidoD mientrs que on el omndo make distcheck dems de onstruirse el pquete se relizn ls siguientes omproionesX e segur de que mke lenD mke distlenD y mke uninstll no omiten (herosF
1.1 Autoconf
gomprue que ls instliones DESTDIR funionnF ijeutn l suite de tests @mke hek y mke instllhekAF
hr slid un pquete que fll en l ejeuin del omndo mke disthek signi( estr dndo slid un pquete que fllr vrios usuriosF is ltmente reomendle pror diho omndo ntes de pulir nuestro pquete en ulquier sitioF i intentrs imitr el sistem de onstruin proporiondo por Autotools por tu propi uent desurirs queX il sistem de onstruin qx tiene muhs rterstis que nos ostrn muhE simo tiempo de implementr por nosotros mismosF elgunos usurios pueden esperr rterstis que tu no hs implementdoF smplementr este sistem de form portle es un trjo difil y exhustivoF @iens en los sripts de sistems que desonoes FFFAF heers de tulizr tu on(gurin pr seguir los mios de los estndrres de odi(in de qxF vs Autotools de qx nos proveen deX rerrmients pr rer el sistem de onstruin qx prtir de simple instruE ionesF n lugr donde se relizn orreiones y mejors ontinumenteF e ontinuin se present un reve resumen del ometido de ls priniples herrmients de AutotoolsF
1.1. Autoconf
Autoconf es un herrmient pr produir shell sripts que on(gurn utomtimente pquetes de digo fuente pr dptrse vrios tipos de sistems osixElikeF vos sripts de on(gurin produidos por Autoconf son independientes de Autoconf undo se ejeutnD por lo que sus usurios no tienen que her nd on AutoconfF
vos sripts de on(gurin produidos por Autoconf o requieren intervenin mnul del usurio undo se ejeutnY normlmente ni requieren que se espei(que el tipo del sisteE m @lo reonoe utomtimenteAF in vez de elloD ompruen individulmente l preseni de d un de ls rterstis requeridsF gomo resultdoD lleg un uen uerdo on sistems hridos yGo personlizdosF in d pquete softwre en el que se us AutoconfD se re un sript de on(gurin prtir de un plntill que list ls rterstis del sistem que el pquete neesitr o usrF i ms trde neesitmos justr el sript por ulquier rznD solo neesitremos mirlo en este sript y no en todos los sudiretorios del proyetoF
1.2 Automake
il prinipl ojetivo de Autoconf es her l vid del usurio ms senillY her ms senill l vid del desrrolldor es solo un ojetivo seundrioF hiho de otr mnerD el prinipl ojetivo no es her l generin del sript configure de form utomti pr los mntenedoresY en vez de elloD el ojetivo es her el configurefil de trtrD portle y predeile pr los pquetes suministrdos los usuriosD y en este sentidoD Autoconf onE sigue su ojetivoF
Autoconf o soluion todos los prolems reliondos on l relizin de pquetes softwre portlesF r soluiones ompletsD Autoconf dee ser usdo en onjunto on otrs herrmients de onstruin de qx omo Automake y LibtoolF ists otrs herrE mients sumen trjos omo l rein de Makele s reursivos on todos los ojetivos estndrD linkdo de lirers omprtidsD etF
1.2. Automake
Automake es un herrmient pr generr utomtimente rhivos Makele.in prE tir de rhivos Makele.amF gd Makele.am es simente un serie de de(niiones de vriles make on regls que se lnzn osionlmenteF vos Makele.in generdos estn justdos los estndres de qx sore MakeleF
il ojetivo de Automake es eliminr el mntenimiento de Makele F vos (heros hiE tules Automake ontienen simplemente un serie de de(niiones de vrilesF gd uno de estos (heros es proesdo pr re un Makele.inF heer her generlmente un Makele.am por diretorio en el proyetoF
Automake impli ierts restriiones sore un proyetoX por ejemploD sume que el proE yeto us AutoconfD y fuerz ierts restriiones en el ontenido del congure.acF edems requiere de perl pr generr los Makele.inF in emrgoD ls distriuiones reds on Automake o requieren perl pr ser onstruidsF
1.3. Libtool
Libtool impli( el trjo del desrrolldor pr enpsulr ls dependenis espeE (s de l pltformD y l interfz de usurio en un simple sriptF ist disedo tl que l funionlidd omplet de d tipo de host est disponile trvs de un interfz genE riD de form que ls peuliriddes desgrdles estn oults pr el progrmdorF
v interfz onsistente de Libtool es trnquilizdor FFF los usurios no neesitn leer l osur doumentin pr poder tener su pquete fuente onstruido omo un lirer dinmiF olo tendrn que ejeutr el sript configure y Libtool relizr todo el trjo suioF
Captulo 2
Ejemplo sencillo: HelloWorld!
vos proyetos softwre deern estr orgnizdos siempre que se pued en surpeE tsD por lo que prtiremos de est ideF sdelmenteD todos los (heros fuente deern estr en un rpet llmd sr dentro de l rpet del proyetoD y on el resto de (heros @omo mke(lesD sripts on(gureD y (heros de textoA seprdos en l rz del proyetoF vos proyetos on vrios niveles de rpets suelen ser llmdos proyetos profundosF he momento empezremos on el ejemplo ms senillo posileD un proyeto softwre on un progrm tpio de hol mundo3F vos tres (heros que deen generrse en este proyeto softwre son los siguientesX
congure.acF Makele.inF
srGMakele.inF
pigur PFIX piheros generr en un proyeto softwre e prtir de estos (heros se gener el sript configure y los (heros Fin on ls de(E niiones y regls neesris pr posteriormente generr los Makele @ver (gF PFIAF gmo veremos ontinuin el ontenido de estos (heros pr un proyeto senillo es muy reve y muy similr pr diferentes proyetosF
1 3 5
2.1.1. Congure.ac
AC_INIT( [ amhello ] , [ 1 . 0 ] , [ bugreport@address ] ) AM_INIT_AUTOMAKE([ Wall Werror foreign ] ) AC_PROG_CC AC_CONFIG_HEADERS( [ config . h ] ) AC_CONFIG_FILES( [ Makefile src / Makefile ] ) AC_OUTPUT
2.1.2. Makele.am
SUBDIRS = src
2.1.3. src/Makele.am
2.1.4. src/main.c
2 4 6 8
);
oservremos que se hor tenemos disponiles nuevos (heros en nuestros diretoriosD tl y omo muestr l pigF PFPF
pigur PFPX piheros generdos trs ejeutr autoreconf install vos (heros Makele.inD srGMakele.inD configureD y cong.h.in son ls plntills de on(gurin esperdsF aclocal.m4 es un (hero on de(niiones pr ls mros de tereE ros usds en congure.acF depcompD install.sh y missing son herrmients uxilires usds durnte l onstruinF autom4te.cache es un diretorio que ontiene los (heros h de AutotoolsF ehor podemos ejeutr el sript configure pr on(gurr el progrmF
pipo@pipo-desktop: $ ./configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking for gcc... gcc ... checking dependency style of gcc... gcc3 configure: creating ./config.status config.status: creating Makefile config.status: creating src/Makefile config.status: creating config.h config.status: executing depfiles commands
i no hy prolemsD podemos ejeutr el omndo make pr relizr l ompilin del progrmF gundo el progrm se ompile orretmente lo ejeutmos pr ver que todo funion orretmenteF
pipo@pipo-desktop: $ make make all-recursive make[1]: se ingresa al directorio ... Making all in src make[2]: se ingresa al directorio ... gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c mv -f .deps/main.Tpo .deps/main.Po gcc -g -O2 -o hello main.o
or ltimoD y omo omentmos nteriormenteD ejeutndo el omndo make distcheck ompromos si nuestro pquete est listo pr distriuirseF
pipo@pipo-desktop: $ make distcheck ... ============================================= amhello-1.0 archives ready for distribution: amhello-1.0.tar.gz =============================================
Captulo 3
Los dos paquetes principales
gomo se h podido oservrD el proeso de on(gurin y generin de un pquete es relmente senillo hiendo uso de ls AutotoolsF ist simpliidd se l deemos priniE plmente GNU Autoconf y GNU AutomakeF e ontinuin se muestrn los priniples omndos y rterstis que nos ofreen dihos progrmsF
Autoconf
autoconf X gre el configure prtir del congure.acF autoheaderX grete el cong.h.in prtir del congure.acF autoreconf X ijeut tods ls herrmients en el orden deudoF autoscanX ixmin los fuentes en squed de prolems omunes de portiE liddD y de mros perdids en congure.acF autoupdateX etuliz ls mros osolets en congure.acF ifnamesX ene los identi(dores de tods ls diretivs #if/#ifdef/... autom4teX il orzn de AutoconfF wnej el lenguje wR e implement ls rterstis usds por l myor de ls herrmients de rriF til pr rer lgo ms que un simple configureF
Automake
automakeX gre los Makele.in prtir de los Makele.am y congure.acF aclocalX ixmin congure.ac pr el uso de mros de tererosD y rene ls de(niiones en aclocal.m4F
3.1. Autoreconf
r supuesto uno de los myores vnes dentro de ls AutotoolsF v (gur QFI muestr los omndos que se tenn que ejeutr nteriormente que preier este omndoD mientrs que l (gur QFP muestr el pnorm tulF eutoreonf nos ofree ls siguientes ventjsX xo tienes que reordr l form de interin de tods ls herrmientsF s autoreconf install pr on(gurr el pquete iniilmenteF
pigur QFPX gomndo ejeutr on l priin de utoreonf gontr on ls regls de reonstruin @slid de Makele s pr volver ejeutr ls herrmients deuds undo ejeutes lgn (hero fuenteF olo neesits un ide somer del propsito de d herrmient pr omprender los erroresF @u herrmient se quej y sore quecA
1 3 5 7 9 11
10
AC_INIT( [ amhello ] , [ 1 . 0 ] , [ bugreport@address ] ) #I n i c i a l i z a autoconf . #Especifica nombre del paquete , numero de version y direccion para #reportar errores . AM_INIT_AUTOMAKE([ Wall Werror foreign ] ) #I n i c i a l i z a automake . #Activa los alarmas de automake y las reporta como errores . #foreign hace que se ignoren algunos estandares de codificacion GNU AC_PROG_CC #Comprueba la existencia de un compilador de C AC_CONFIG_HEADERS( [ config . h ] ) #Declara a config . h como cabecera de #salida AC_CONFIG_FILES( [ Makefile src / Makefile ] ) #Declara a Makefile y #src / Makefile como ficheros de salida AC_OUTPUT #Da salida a todos los ficheros declarados
e ontinuin se muestrn ls slids on l opin foreign y sin ellF gon foreign
$ autoreconf --install configure.ac:2: installing `./install-sh' configure.ac:2: installing `./missing' src/Makefile.am: installing `./depcomp'
in foreign
$ autoreconf --install configure.ac:2: installing `./install-sh' configure.ac:2: installing `./missing' src/Makefile.am: installing `./depcomp' Makefile.am: installing `./INSTALL' Makefile.am: required file `./NEWS' not found Makefile.am: required file `./README' not found Makefile.am: required file `./AUTHORS' not found Makefile.am: required file `./ChangeLog' not found Makefile.am: installing `./COPYING' autoreconf: automake failed with exit status: 1
3.2.2. Makele.am
1 3 5
bin_PROGRAMS = hello #Construccion de programas . Al tener el p r e f i j o #bin , los programas se instalaran en bindir . Solo hay un programa #a construir : hello . hello_SOURCES = main . c #Para crear el programa hello , solo se compila #el fichero main . c
11
in l l QFI se puede preir omo se orgniz el sistem de (heros hitulmente l trjr en este tipo de proyetos softwreF hiretory vrile
prefix exec-prefix bindir libdir FFF includedir datarootdir datadir mandir infodir FFF
Captulo 4
Usando Autoconf
que he uso de instruiones de tipo mroD en el configureD un shell sript ompletoF Autoconf ofree vris mros pr relizr omproiones omunes de on(gurinF xo es extro tener un congure.ac sin onstrutores de shellD usndo solo mrosF il proesdor rel de mros es tulmente qx wRF Autoconf ofree un infrestrutur enim de qx wRD dems del onjunto de mrosF
1 3 5 7 9 11
# Preludio . AC_INIT( [ amhello ] , [ 1 . 0 ] , [ bugreport@address ] ) # Comprobaciones para programas # Comprobaciones para l i b r e r i a s # Comprobaciones para ficheros de cabecera # Comprobaciones para typedefs , structures , y # c a r a c t e r i s t i c a s del compilador # Comprobaciones para funciones de l i b r e r i a # Ficheros de salida AC_CONFIG_FILES( [ FILES ] ) AC_OUTPUT
4.1.1. Preludio
AC_INIT(PACKAGE, VERSION, BUG-REPORT-ADDRESS) sniilizin oligtori de AutoconfF
AC_PREREQ(VERSION) equerir un versin mnim de AutoconfF FeF AC_PREREQ(2.61) AC_CONFIG_SRCDIR(FILE) n omproin de seguriddF FILE dee ser un (hero fuente distriuidoD y esto se segur de que configure no se ejeut desde un espio exteriorF FeF AC_CONFIG_SRCDIR([src/main.c])F
13
AC_CONFIG_AUX_DIR(DIRECTORY) vos sripts uxilires omo install-sh y depcomp deen enontrrse en el DIRECTORYF FeF AC_CONFIG_AUX_DIR([build-aux])F i esto no se inluye se tom por defeto el diretorio tulF
1 3
AC_CHECK_PROGS( [TAR] , [ tar gtar ] , [ : ] ) if test " $TAR " = : ; then AC_MSG_ERROR( [ Este paquete necesita tar . ] )
fi
FFF y muhos ms
2
14
FFF deermos usr ms trde $(EFENCELIB) en l regl de linkdoF i ACT-IF-FOUND no se estlee y l lirer se enuentrD AC_CHECK_LIB hr que LIBSaElLIBRARY $LIBS y #define HAVE_LIBLIBRARYF @Automake us $LIBS pr el linkdo de tods ls ossFA
AC_CONFIG_FILES(FILES...) gre FILE por d FILE.inF FILES ontiene de(niiones hehs on AC_SUBSTF
1
eutomke re FILE.in por d FILE que tiene un FILE.amF isto tmin sirve pr proesr (heros que no son Makele sF
4.2 Descubriendo M4
15
4.2. Descubriendo M4
er muy til onoer fondo el lenguje de progrmin wRF odis enontrr ms detlles en httpXGGwwwFlrdeFepitFfrG dlGutotoolsFhtml
Usando
Automake
Captulo 5
Automake yud l rein de Makele portles y que umplen el estndr qx generndo los Makele.in prtir de los Makele.amF vos Makele.am siguen somermente l mism sintxis que los MakeleD sin emrgoD usulmente solo ontienen de(niiones de vrilesF Automake re regls de onstruin prtir de dihs de(niionesF edems puedes seguir diendo regls Makele los (heros Makele.amD y que Automake ls
preservr en l slidF
AM_INIT_AUTOMAKE( [OPTIONS] )
in l eF PFIFI pree l mro que iniiliz AutomakeD y que omprue l preseni de ls herrmients neesris pr su orreto funionmientoF intre ls diferentes opiones que podemos inluir en AM_INIT_AUTOMAKE tenemos ls siguientesX
-WallX etiv tods ls lrms @wrningsAF -WerrorX eport ls lrms omo erroresF foreignX elj iertos requerimientos del estndr qxF 1.10.1X equiere un versin mnim de AutomakeF dist-bzip2X min re rhivos trFzP durnte make dist y make distcheckF tar-ustarX gre rhivos tr usndo el formto ustrF
option_where_PRIMARY = targets . . .
17
PROGRAMSX rogrmsF LIBRARIESX virers esttisF LTLIBRARIESX virers dinmisF HEADERSX geersF SCRIPTSX riptsF DATAX htos diionlesF
where puede tomr los vloresX
bin_X rogrms ejeutles que se instln en 6@indirA lib_X virers que se instln en 6@lidirA custom_X goss que se instln en 6@ustomdirAD donde diho diretorio dees de(E nirlo previmenteF noinst_X xo instlleF
por ltimoD option puede serX
dist_X e distriuyen los targets @si no se espei( est es l opin por defetoAF nodist_X xo se distriuyenF
1 3
#Makefile .am bin_PROGRAMS = foo runme foo_SOURCES = foo . c foo . h print . c print . h run_me_SOURCES = run . c run . h print . c
vos progrms foo y run-me se instlrn en $(bindir)F n detlle uriosoD es que los rteres no lphEnumrios @omo el guin o signo menos EA son siempre mpedos guiones jos F Automake lul utomtimente medinte l list de (heros fuente indidosD los ojetos onstruir y los linkdos relizrF vs eers no se ompilnD pero se indin qu pr que sen distriuidsF
5.3 Directorios
18
2 4
#Makefile .am lib_LIBRARIES = l i b f o o . a libbar . a libfoo_a_SOURCES = foo . c privfoo . h libbar_a_SOURCES = bar . c privbar . h include_HEADERS = foo . h bar . h
r onstruir lirers esttis deemos dir l congure.ac l mro AC_PROG_RANLIBF hihs lirers se instlrn en $(libdir)F vs lirers siempre deen seguir l nomenlE tur lib*.aF vs eers plis @lne RA se instlrn en $(includedir)F vs eers privds @(heros Fh en lnes P y QA no se instlrn omo (heros fuente ordinriosF
1 3 5 7
#src / Makefile .am bin_PROGRAMS = foo runme foo_SOURCES = foo . c foo . h print . c print . h run_me_SOURCES = run . c run . h print . c LDADD=../ l i b /libcompat . a AM_CPPFLAGS = I \$( srcdir ) / . . / l i b #run_me_LDADD = . . / l i b /libcompat . a #run_me_CPPFLAGS = I \$( srcdir ) / . . / l i b
LDADD se de undo se enlzn todos los progrmsF AM_CPPFLAGS ontiene nders pr el preproesdor diionlesF vs dos ltims lnes omentds hen refereni que se pueden usr vhehh y gpveq pr progrms independientesF
5.3. Directorios
#configure . ac AC_CONFIG_FILES( [ Makefile l i b / Makefile src / Makefile src / dira / Makefile src / dirb / Makefile ] ) # Makefile .am SUBDIRS = l i b src
heemos tener un Makele @uno por d Makele.am A por diretorio y todos ellos deen estr delrdos en congure.acF
1
gd Makele.am dee estleer el orden en que sus diretorios se reorren usndo l vrile SUBDIRSF
i no espei(mos el diretorio tul medinte un punto FD este se ompilr impliE tmente despus de los sudiretoriosF
19
Makele y los (heros ojeto estn en el build treeF Makele.in y Makele.am y los (heros fuente estn en el source treeF
i se ejeut FGconfigure en el diretorio tulD los dos roles sern el mismoF is posile que neesitemos utilizr l vrile srcdir undo espei(quemos nders pr herrmientsD o esrimos omndos propiosF FeFD pr indirle l ompildor que inluy eers de /dirD tendremos que esriir -I$(srcdir)/dirF
foo_CFLAGSX fnders diionles pr el ompildor de gF foo_CPPFLAGSX fnders diionles pr el preproesdor @Ess y EhsAF foo_LDADDX vinkdo de ojetos diionlD Els y Evs @si foo es un progrmA foo_LIBADDX vinkdo de ojetos diionlD Els y Evs @si foo es un lirerA foo_LDFLAGSX fnders de linkdo diionlesF
il vlor por defeto pr foo_XXXFLAGS es 6@ewpveqAF
5.5. Qu se distribuye?
vos omndos make dist y make distcheck rern un trll que ontendrX odos los (heros fuente delrdos usndo ..._SOURCESF ods ls eers delrds usndo ..._HEADERSF odos los sripts delrdos usndo dist_..._SOURCESF odos los dtos delrdos usndo dist_..._SOURCESF piheros omunes omo ghngevogD xiD etF piheros o diretorios extr listdos en EXTRA_DISTF
5.6 Condicionales
20
5.6. Condicionales
2 4 6
1 3 5
#Programas condicionales bin_PROGRAMS = foo if WANT_BAR bin_PROGRAMS += bar endif foo_SOURCES = foo . c bar_SOURCES = bar . c #Fuentes condicionales bin_PROGRAMS = foo foo_SOURCES = foo . c if WANT_BAR foo_SOURCES += bar endif
bar es onstruido si WANT_BAR es verdderoF @1er ejemploA bar.o es linkdo en foo si WANT_BAR es verdderoF @2o ejemploA foo.c y bar.c son distriuidos pesr de WANT_BARF WANT_BAR se dee delrr y se le dee dr un vlor en congure.acF
#configure . ac AC_CHECK_HEADER( [ bar . h ] , [ use_bar=yes ] ) AM_CONDITIONAL( [WANT_BAR] , [ test " $use_bar " = yes ] )
Captulo 6
Libtool
1 3 5
22
Libtool
1 3 5 7 9
/ l i b /say . c
puts ( " Hello World !" ) ; puts ( " This is " PACKAGE_STRING
"."
);
/ l i b /say , h
2 4 6 8
/ src /main . c
return 0;
say_hello ( ) ;
1 3 5
#l i b / Makefile .am lib_LTLIBRARIES = l i b h e l l o . la libhello_la_SOURCES = say . c say . h #src / Makefile .am AM_CPPFLAGS = I ( srcdir ) / . . / l i b / bin_PROGRAMS = hello hello_SOURCES = main . c hello_LDADD = . . / l i b / l i b h e l l o . la #Makefile .am SUBDIRS = l i b src
2 4 6 8
AC_INIT( [ amhello ] , [ 2 . 0 ] , [ bugreport@address ] ) AC_CONFIG_AUX_DIR( [ build aux ] ) AM_INIT_AUTOMAKE([ Wall Werror foreign ] ) AC_PROG_LIBTOOL AC_PROG_CC AC_CONFIG_HEADERS( [ config . h ] ) AC_CONFIG_FILES( [ Makefile l i b / Makefile src / Makefile ] ) AC_OUTPUT
23
enable-shareX gonstruye lirers dinmisF disable-shareX xo lo heF enable-staticX gonstruye lirers esttisF disable-staticX xo lo heF
~/prueba % gdb -q src/hello "src/hello": not in executable format: File format not recognized (gdb)
enemos que dir el siguiente pre(joX libtool mode=execute
24
2 4
#l i b / Makefile .am lib_LTLIBRARIES = l i b h e l l o . la libhello_la_SOURCES = say . c say . h libhello_la_LDFLAGS = version info CURRENT:REVISION:AGE
Autotools
Captulo 7
lguns extensiones de rD g5 y hF roporion un mquinri genri pr generr un proyeto de doumentin ien formtedo diretmente del digo fuente y de los dtos externosF v doumentin resultnte est disponile en vrios formtosD pFeF pdfD htmlD hmD etF r dir el soporte de Doxygen ls AutotoolsD voy explir el ejemplo suministrdo por l we de wrtin wnnF gon diho ejemplo se proporion un serie de prmetro que se pueden dir l configurepr generr de form rpid y senill diferentes tipos de doumentin medinte DoxygenF hiho ejemplo puede ser desrgdo de quF vos psos relizr pr integrr Doxygen on ls Autotools en nuestro proyeto son los siguientesX houmentr nuestro digo siguiendo l gu de doumentin doxygenF grer un soporte de Autotools pr nuestro proyetoD tl y omo hemos ido explindo lo lrgo de este doumentoF hesrgr el hoxmpleEvPFIFtrFgz en l rpet rz de nuestro proyetoF snluir l lne 9inlude 6@topsrdirAGminludeFm9 l (hero Makele.am de nuestro diretorio rzF edir l lne 'DX_INIT_DOXYGEN($PACKAGE_NAME, MYDOXYGENCONFIG)' nuestro congure.acF @$PACKAGE_NAME se estlee utomtimente medinte AC_INIT repreE sentndo l nomre del proyetoD y MYDOXYGENCONFIG es el (hero de on(gurin Doxygen que viene on hoxmple pr nuestro proyetoF 'DX_INIT_DOXYGEN ept un terer prmetro opionl pr indir el diretorio de slid pr l doumentinD que por defeto es doxygenEdoF or d modo de slid puedes estleer su soporte medinte ls funiones DX_HTML_FEATURED DX_CHM_FEATURED DX_CHI_FEATURED DX_MAN_FEATURED DX_RTF_FEATURED DX_XML_FEATURED DX_PDF_FEATURED DX_PS_FEATURE diendo l lne DX_XXX_FEATURE(ON) o DX_XXX_FEATURE(OFF) tu congure.ac ntes de l lne DX_INIT_DOXYGEN(..)F n vez generdo el configureD podemos ver ls opiones relionds on doxygen ejeutndo './configure help'F uedes usr dihs opiones pr determinr el tipo de
26
slid por defeto de doxygen @pFeF 9!disleEdoxygenEdo9 o 9!enleEdoxygenEpdf9AF gon 'make doxygen-doc' generrs (nlmente l doumentin Doxygen determind por el (hero de on(gurin DoxygenF od l doumentin ser situd en un nuevo sudiE retorio llmdo por defeto doxygenEdoF