Основната идея на мейк са "целите". Предполагам си ги разбрал как се описват с двуеточие, но за всеки случай един убав пример:
Туй ще рече, че ако ти трябва "бебе" първо трябва да си сигурен че имаш налице "мъж" и "жена" и после трябва изпълниш командата "секс"

Мъжът и жената в случая са изисквания, за целта бебе. Но ако са неизвестни и те се добавят като "цели" и се търсят правила за тези цели...
По подразбиране "целта" е някакъв файл, затова нормално мейк в горния пример ще потърси файл "бебе" и съответно файлове "мъж" и "жена". Ако има такива файлове и бебето е по-младо (по дата) от родителите, значи целта е изпълнена. Ако не, първо се подсигуряват родителите, а после секс

Но не винаги целта непременно трябва да е файл. Примерно "make clean" не означава че ти трябва някакъв файл с име "clean". Даже може да се получи кофти ако случайно имаш такъв файл и неговата дата пасне на правилата за clean и тогава мейк ще си помисли че целта му е изпълнена и няма да извика никакви команди.Та за да се избегнат подобни недоразумения е добре да си маркираш като .PHONY всички цели дето не са файлове, а нещо друго като скрипт или каквато там абстракция искаш.
Тук инициализирам разни променливи, повечето от които ще бъдат допълване при обхождането на module.mk файловете. Всяка променлива е някакъв списък от думи, разделени с интервал.
Да това са ти модулите на най-високо ниво... Каквото добавиш тук, то ще го търси като поддиректория и ще инклудне module.mk от тая директория.
Ако имаш под-директори на тия под-директории трябва в съответния module.mk да имаш примерно следното:
т.е. в local_module първо изброяваш локалните под-модули, после им добавяш пътя към тях и чак тогава ги натрупваш към глобалната променлива. За удобство навсякъде където попълвам имена на файлове или директории ги попълвам без пътища, а после чрез макроса changepath им добавям пътя...
Не ги ползвам за нищо, но са оставен като "цели" дето могат да се сетнат и в някои модул в случай че искаш нещо да стане преди или след компилиране. Примерно в posbuild може да си викнеш JFLASH и да си програмираш таргета ако искаш. Макар че по-добре е да го сложиш преди дебъгване, щото може да искаш да компилираш без да пишеш по реалния хардуер...
Да много видове сорсове.... И да попълват се във всеки module.mk с конкретните сорсове...
inc_dir си се ползва. Това е за include директории. Аз поради ред причини хедър файловете си ги държа там където са ми С-файловете. Ако съответния модул съдържа хедъри дето трябва да се ползват от други, слагам следното в module.mk:
#add current directory to include path
inc_dirs += $(subdirectory)
И вече хедърите стават видими навсякъде. Не го правя за всеки модул по разбираеми причини. Примерно ОС-а ми главната му директория са все системни хедъри и файлове и затова ги добавям в пътя, но някои под-директории дето са в приложението не искам да се виждат навън. Само в текущата директория... В краен случай предпочитам да сложа пътя в #include "../ala/bala/header.h"
libraries :=
Това е в случай че си компилираш библиотечки сам (аз още не ми се е налагало...)
cdefines :=
adefines :=
Това е ако искаш от тук да си вкараш "#define нещо_си". И това не съм го ползвал.... Предпочитам да си ги напиша изрично в някой хедър вместо да ги подавам така...
Абсолютно.... Може да си правиш каквото искаш дърво с модули с колкото искаш нива надолу... Трябва само във всяка директория да имаш .mk файл, който общо взето е доволно прост - само изборява какво се добавя.... Ех вика се и оня макрос евентуално и се натрупва към някоя от глобалните променливи.
Почти... аз сорс и хедър си ги слагам в една и съща директория - тая на самия модул. Не знам защо, но така ми се вижда най-чисто. Всеки сорс файл от модула вижда всеки хедър от същия модул просто щото са му в локалната директория. То не случайно компилатора първо търси в текущата и чак ако не намери тръгва да търси инклуд директории....
Не знам защо дургите разделят на едно място сорсове на друго хедъри... Не го разбирам това...
Но ти може да си организираш както искаш нещата. Ако искаш да си правиш директория само с хедъри - къв ти е проблема? Тя ще си е пак модул и ще си има .мк файл в който ще има само :
inc_dirs += $(subdirectory)
без да изброяваш никакви сорсове....
да, макар че на мен още не ми се е налагало
виж хелпа на съответните флагове... да не мислиш че аз ги помня
-W по принцип е за warnings -Wa май беше да уорнигс за Алл..... Демек за щяло и нещало ще имаш предупреждения и докато свикнеш ще е зор... Щот аз си мислих че знам С, ма като видях какви warning дава....
а другото май беше за листинг файлове, аз си ги правя... щото зяпам асемблера. Ако те интересуват самите функции най-добре да ти дам книга по въпроса, макар че те са интуитивни suffix фръща суфикса, subst го заменя...