Makefile nagy projekthez

Régóta szerettem volna egy használható (GNU) Makefile-t írni, hogy bonyolultabb projektekhez is tudjam használni, és ne kelljen autoconf, automake és hasonló szörnyedvényekkel szenvedni. Azt hiszem, sikerült ezt megoldanom.

http://panther.inf.elte.hu/linux/programming/makefile-test/makefile-tes…

Most hirtelen nem tudom, hogy mit lehetne rajta javítani a shared object támogatáson felül. Ha nem csak egy teszt verzió lenne, akkor minden bizonnyal lenne ötletem :)

De nézzük, hogyan is kell használni:
1) a Makefile-ban a modules változóban a feldolgozandó könyvtárak nevét fel kell sorolni
2) e könyvtárakban létre kell hozni egy-egy module.mk fájlt, statikus könyvtár és alkalmazás esetén
van is példa, igazából rém egyszerű.

Végezetül hadd ajánljak egy hasznos olvasmányt a make parancs doksija mellé:
Robert Meclenburg: Managing Projects with GNU Make, Third Edition (O'Reilly, 2005)

A fenti könyv és az OpenTTD forráskódja alapján készült el az alkotás :)

Hozzászólások

Igen, a problema nem egyszeru, sok forras, rakat target, sok alkonyvtar...:)

Egyebkent az autoconf maga nem annyira rem bonyolult, kb fel ora alatt meg lehet tanulni alapszinten. Ami szopas, az az automake, azt par ora szenvedes utan feladtam. Az autoconf teljesen fuggetlen az osszes tobbi szornyedvenytol, szerintem azt erdemes megtanulni. Ez nagyon jo intro, tenyleg csak a lenyegre koncentral (semmi automake, autoegyeb, libtool, ac-blabla cuccot nem kever bele).

Amivel meg lehet impruvolni egy makefile-t (csak egy otlet ;)) azok a (GNU szerinti) sztenderd fo" targetek: install, dist, distclean, maintain-clean, {ps,pdf,dvi,info,html,man} generalas + installalas.

A.

Kösz, majd megnézem.

Még nem sikerült rájönnöm, hogy lehet architektúra-függő végződést adni a fájloknak (linux: .so, OS X: .dylib), annyira nem néztem meg. Amit megcsinálnék még, azok tényleg a standard target-ek, meg normális függőség-kezelés (milyen fv-könyvtárakat használnak).

Egyszer már foglalkoztam az autoconf-fal, majd sort kerítek erre is, de csak apránként.

Még nem sikerült rájönnöm, hogy lehet architektúra-függő végződést adni a fájloknak (linux: .so, OS X: .dylib)
Hehe, ha rajossz, szolj ;) en egy (ugyan me'g fejlesztes alatt allo) configure.ac-be a kovetkezo" borzalmat irtam:


AC_MSG_CHECKING([dynamic library extensions])
if test `uname` == Darwin ; then
        DLEXT=dylib
        DLSWC=-dynamiclib
        DLDYN=-dynamic
        AC_MSG_RESULT([dylib])
else
        DLEXT=so
        DLSWC=-shared
        DLDYN=-rdynamic
        AC_MSG_RESULT([so])
fi

ezzel minden kapcsolot beallit, amit a gcc-nek at kell adni. persze a feltetelen van mit javitani ;]