Make a adresare
Karel Zak - Zakkr
zakkr na zf.jcu.cz
Pondělí Leden 3 20:44:31 CET 2000
On Mon, 3 Jan 2000, Miloš wrote:
> Zdravim.
>
> Zkousel jsem si napsat jednoduchy Makefile pro jeden svuj programek a
> narazil jsem na nasledujici problem, ktery nevyresila ani narocna cetdba
> dokumentace: mam jeden hlavni adresar (treba ./prg), kde je pouze nekolik
> malo souboru a hlavni Makefile. Je tu i adresar (./prg/code), ktery obsahuje
> vlastni kod programu rozdeleny do adresaru podle fce atd. Napsat Makefiles
> pro tyto adresare nebyl problem, ale horsi je to, ze pokud v ./prg zadam
> make, tak se poste nemuzu dostat do ./prg/code/adresar, kde by se spustil
> prislusny Makefile. Hlavni Makefile pak jenom posklada .o soubory do
> vysledku a to je vse.
>
> Zkousel jsem se i prohrabat Makefiles pro jadro linuxu, ale tam jsem jaksi
> nic kloudeho nenasel (co by mi bylo alespon trochu srozumitelne :-)
>
> Nemate nekdo navrh, co s tim? Pravdepodobne je eseni elegantni a jednoduche,
> takze se omlouvam vsem, ktere jenom nead zdrzuju.
Rad a casto krituzuji zrovna tuto oblast programovani, tak bych mohl jednou
i poradit :-)
Vetsinnou se to dela tak, ze do hlavniko adresare se da Makefile ktery
obsahuje seznam pod-adresaru v kterych jsou take Makefiles a ktery tento
hlavni Makefile vola v nejakem for(). Napr:
all:
for dir in *; do \
if [ -e $$dir/Makefile ]; then \
$(MAKE) -C $$dir; \
fi; \
done
(Tady je ten seznam nahrazen '*', take je mozne na misto -C proste pred
zavolanim make prejit do adresare pomoci "cd $$dir".)
Vhodne je v tech pod-adresarovych Makefiles pouzivat include a nejake ty
spolecne veci mit v nejakem Makefile.global (a ten nejlepe vytvaret via
./configure :-)
Rozsahle zdrojaky to pak vetsinou jeste delaji tak, ze .o soubory kopiruji
to jednoho adresare a v tom se to posklada (libc), nebo se vytvari v tech
podadresarich .a knihovny (kernel?) nebo nejak jinak (treba pomoci ld) se
to zabaluje na vetsi a vetsi baliky az se z toho udela konecny program v
tom hlavnim adresari (PostgreSQL).
Karel
PS. asi bych pouzil na studium neco jineho nez kernel linuxu
konfiguracni/Makefiles system je tu trochu samorostlejsi...
Další informace o konferenci Linux