[TiLUG] copiare un albero di directory con un makefile
Luigi Panzeri aka Matley
matley@muppetslab.org
Gio 13 Mar 2008 12:41:13 CET
vroby <vroby.mail@gmail.com> writes:
> ciao a tutti
> ho un problema con make
> siccome devo fare installare un payload piuttosto complesso mi
> piacerebbe farlo fare in modo automatico.
> per copiare il contenuto di una singola directory uso
>
> for files in ../../../share/sdlBasic/*.properties
> ../../../share/sdlBasic/*.api; \
> do \
> $(INSTALL) -m 644 $$files $(SYSCONF_PATH); \
> done
>
niente for, usa find
find ../../../share/sdlBasic/ -iname \*.properties -or -iname \*.api -type f -exec $(INSTALL) -m 644 \{\} $(SYSCONF_PATH) \;
è possibile che alcuni escape che abbia inserito siano superflui o addirittura errati. Verifica
>
> il problema si pone se in questa directory ci sono altre sotto directory.
> Potrei in effetti usare un cp -R ma nel makefile non credo sia permessa
> una sintassi simile
si, puoi metterci quello che ci vuoi. I comandi che metti in un
makefile (preceduti da un tab) saranno interpretati dalla shell (a
parte un minimo di comandi specifici del makefile e la sostituzione
delle variabili).
> chiedo quindi suggerimenti e un buon manuale avanzato sui makefile visto
> che sono decisamente poco pratico di questo aspetto
> della programmazione.
>
La documentazione ufficiale é buona:
http://www.gnu.org/software/make/manual/make.html
ma se i tuoi makefile diventano complessi, ti suggerisco di usare
automake/autoconf (anche detti autotools). Automake è uno strumento
che genera automaticamente file Makefile.in da file Makefile.am.
autoconf poi trasforma il Makefile.in in Makefile. Sembra un casino ma
1) non lo è; 2) è il modo standard di fare i pacchetti, e risolve un
sacco di problemi con i quali prima o poi ti scontri (tra cui quello
precedente).
apt-get install autotools
e l'ottimo libercolo pieno di esempi:
apt-get install autobook
--
Luigi Panzeri aka Matley
Why Lisp? http://alu.cliki.net/RtL%20Highlight%20Film
Quotes on Lisp: http://lispers.org/
Maggiori informazioni sulla lista
TiLUG