Încercarea de a înțelege scrierea face alfabetizate unui fișier, este iad.
Există unele fișiere: SubClass.h / Cpp, SuperClass.h / Cpp, main.cpp.
Am construit un Makefile:
Se răcește să-l automatiza și împartă în directoare fișiere / h / CPP / o.
S-au găsit o bună modalitate de a obține dependență (prin bash includ adăugat la Makefile)
Și este necesar ca ar epuiza a fost SubClass.o: SubClass.cpp SubClass.h SuperClass.o. Nu înțeleg, cum pot realiza acest lucru cu ajutorul face? Fac în mod clar ceva greșit.
Prin wildecard am învățat pentru a obține o listă de fișiere în dosarul, dar în subfoldere, cum ar fi (găsindu-se subfoldere, etc)?
Este un astfel de model simplu și popular al organizației de proiect, nu au nimic gata? Poate am scris o bicicletă. D
PS: Eu nu cer să scrie ceva despre mine, trebuie doar să se miște în direcția cea bună.
Și este necesar ca s-ar epuiza a fost SubClass.o: SubClass.cpp SubClass.h SuperClass.o
Și de ce? De ce recompilarea SuperClass.cpp recompilați SubClass.cpp?
De ce nu face acest lucru:
g ++ se genera fișiere cu dependențe (.D).
Acesta a construi, de obicei, fiecare fișier .o care realizează cu g ++ -MMD parametru. care generează un fișier cu dependențe (fără fișiere de sistem). Regenerare fișiere cu dependențe numai atunci când schimbați sursa.
= Objs, dependențele = genera o listă de fișiere cu built-in a face posibila înlocuire
$ @ Și $<так называемые "автоматические переменные". $<- имя первой зависимости (first prerequisite). $@ - имя цели для правила (выходного файла) (target file name).
$ @ = Hello.o - numele fișierului de ieșire. $<= hello.c hello.h - входные файлы
În ultima linie a Makefile include fișiere cu dependențe (- la începutul liniei înseamnă a ignora eroarea.
De obicei relativ rar scrie Makefile, și toate păreau să fie stăpânit de „magic“ și se străduiește pentru cele șase luni să se evapore din mintea lui. Așa că încerc să scrie un Makefile simplu, ca aceasta (pentru cazul dumneavoastră).
Linia după dependențe depind de .o .h adaugă echipa makedepend (simbolul @ în fața ei suprimă producția sa la stdout), care este executat atunci când alergăm
după o schimbare în componența dosarului de proiect, sau pentru a adăuga noastre (non-sistemică) fișierele .h în orice Cpp
Când ne numim
fără argumente, Makefile începe să curgă de la prima marcă (celălalt, dacă nu depind de ea, nu va mai fi văzut). Aici toate: aparent de prisos (ar putea începe imediat fișierul cu programm :), dar uneori doriți să faceți un singur apel pentru a asambla mai multe module, iar apoi acestea sunt pur și simplu enumerate în progs variabile.
Aici mă întorc la main.cpp F.H. la rândul său, SubClass.cpp f.h și data.h. și SuperClass.cpp nu includ nimic.
Asigurați implicit construiește în funcție de .o .cpp (sau .c) și determină g ++ cu substituirea valorilor CXXFLAGS variabile (și pentru utilizări CFLAGS gcc).
Taste pentru linker (apel $ (CC) -o.) Prefer să prescrie în mod explicit sau într-o echipă, sau în variabilele Makefile, pe care le substituie pentru a obține. Acest lucru poate salva o mulțime de timp, atunci când depanare un an sau doi (mai ales în cazul în care a produs „foaie“ foarte mult timp de asteptare atunci când marca).
În cazul în care acțiuni personalizate sunt necesare pentru a compila orice fișier, acesta prevede manual. De exemplu, vrem (poate uneori) folosesc atunci când compilarea SubClass.cpp fișier preprocessor TEST variabilă. apoi scrie
undeva între toate: și depind. În acest caz, trebuie să includă argumentele executării poruncii lui CXXFLAGS variabilă în mod explicit. Am scris aici este, de asemenea, depinde de Makefile. că, atunci când modificați -DTEST recompilare a avut loc SubClass.o continua reconstruirea programm.
Acum, editați Makefile, compila eliminați -DTEST SubClass.cpp