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