Buďme upřímní. Ruční zadávání dlouhých kompilačních příkazů gcc je utrpení. Situace se rychle zhorší, když vaše kódová základna roste, zahrnuje více knihoven a neustále věci upravujete. Skončíte s noční můrou kopírování a vkládání, která se rozbije, pokud vynecháte jednu vlajku.
Do obrazu vstoupí makefiles.
Existují z jednoho důvodu: přimět vás, abyste přestali ručně zadávat stejnou sekvenci kompilace znovu a znovu. Místo toho, abyste si pamatovali přesné příznaky a pořadí souborů objektů, napíšete recept. Pak jednoduše napíšete make.
Jak Makefile vlastně funguje
Začnete vytvořením souboru nazvaného doslova makefile. Žádné prodloužení. Pouze jméno. Interně definujete závislosti.
Zde je základní struktura pro malý projekt C:
Dávejte pozor na zářezy. Tady nováčci často narazí. Ta mezera před gcc? Musí to být znak tabulátoru. Ne osm mezer. Tabulování. Pokud použijete mezery, make vyvolá záhadnou chybu a vy strávíte deset minut přemýšlením, proč vaše syntaxe vypadá dobře pro lidské oko, ale ne pro stroj. Každý příkazový řádek v závislosti musí začínat tabulátorem. Samotné definice závislostí by měly být zarovnány doleva. Žádné výjimky.
Logika závislosti
V makefile jsou dva typy řádků. První jsou čáry závislostí. Vypadají jako „cíl: závislosti“.
main.o: main.c util.h
To v překladu znamená: “Potřebuji main.o. Abych to získal, potřebuji main.c a util.h.”
Druhým typem je spustitelný řetězec. Je závislá a začíná s tabulkou. Toto je příkaz, který se spustí, pokud make rozhodne, že je potřeba znovu sestavit cíl.
Systém funguje na jednoduchém principu: pokud je některý soubor na pravé straně dvojtečky novější než soubor na levé straně, spustí se níže uvedené příkazy. Změnili jste util.h? make to vidí, ví, že na tom závisí main.o a util.o, a znovu je sestaví. To automatizuje logiku.
Pravidlo cíle
Existuje jedno zlaté pravidlo pro spuštění vašeho makefile. První zadaný cíl je ten, který se make pokouší sestavit ve výchozím nastavení.
Ve výše uvedeném příkladu je main prvním řádkem. Takže když spustíte make bez argumentů, vytvoří se konečný spustitelný soubor.
main: main.o util.o
gcc -o main main.o util.o
Pokud změníte main.o, spustí se nové sestavení main. Pokud změníte main.c, spustí se main.o, který pak začne main. Je to řetězová reakce. Nemusíte to spravovat. Jednoduše upravíte zdrojový kód a spustíte make.
Co když nejsem na Unixu?
Pokud používáte Windows nebo IDE jako Visual Studio nebo Xcode, možná neuvidíte makefile v tradičním slova smyslu. Nepanikařte. Váš kompilátor má pravděpodobně ekvivalentní funkce.
Integrovaná vývojová prostředí mají často pod kapotou sestavovací systémy. Hledejte “Konfigurace sestavení” nebo “Vlastnosti projektu”. Dělají totéž: sledují závislosti a obnovují pouze to, co se změnilo. Ale pokud se budete držet příkazového řádku, make je standard.
Větší obrázek
Použití make není

































