Když instalujete jakýkoli software ze zdroje, obvykle spouštíte příkazy jako — „make“, „make install“, „make clean“ atd. Přemýšleli jste, co všechny tyto příkazy make skutečně dělají? Jistě, víme, že se pokouší zkompilovat a nainstalovat software. Ale proč dělat? Co to opravdu dělá?
Pro kompilaci jednoho C programu je velmi užitečný příkaz cc. Pro kompilaci více C programů je velmi užitečný nástroj Make.
Programátoři v jazyce C a správci systému také zjistí, že je užitečné automatizovat úlohy související s kompilací pomocí nástroje make. V tomto článku si ukážeme, jak používat příkaz make.
1. Vytvořte soubor Makefile pro jednoduchou kompilaci
Předpokládejme, že máte ukázkový soubor programu C s názvem helloworld.c. Pomocí příkazu cc byste jej obvykle zkompilovali, jak je uvedeno níže.
$ cc -o helloworld helloworld.c
I když ke kompilaci jednoho programu nepotřebujete použít make, následující příklad vám dá představu, jak použít make. Vytvořte makefile, jak je ukázáno níže.
$ vim makefile helloworld : helloworld.c cc -o helloworld helloworld.c
Provedením make vytvořte spustitelný soubor helloworld, jak je znázorněno níže.
$ make helloworld (or) $ make
Vzhledem k tomu, že makefile obsahuje pouze jeden cíl „helloworld“, můžete také zavolat příkaz make bez jakéhokoli argumentu, jak je uvedeno výše.“make“.
Ujistěte se, že se makefile i zdrojový kód nacházejí ve stejném adresáři, jinak zadejte příslušnou cestu ke zdrojovým souborům v makefile.
Ve výchozím nastavení příkaz make očekává, že soubor make bude buď Makefile nebo makefile . Pokud se název souboru make liší od kteréhokoli z těchto dvou, měli byste to zadat do příkazu make pomocí volby -f, jak je uvedeno níže.
$ make -f sample.txt
Pro ty, kteří jsou v C noví, si přečtěte článek C Hello World Program.
2. Vytvořte soubor Makefile pro kompilaci více než jednoho souboru
Pro kompilaci více souborů použijme tři soubory – getname.c, getaccno.c a main.c.
Na základě těchto tří souborů *.c vytvoříme spustitelný soubor nazvaný „getinto“.
Pomocí příkazu cc byste obvykle provedli kompilaci, jak je uvedeno níže.
$ cc -o getinfo main.c getname.c getaccno.c header.h
Můžete také zkompilovat jednotlivé soubory *.c, jak je uvedeno níže, a nakonec vytvořit spustitelný soubor „getinfo“, jak je znázorněno níže.
$ cc -c getname.c $ cc -c getaccno.c $ cc -c main.c $ cc -o getinfo main.o getname.o getaccno.o header.h
Pomocí našeho přátelského nástroje Make to můžete efektivně provést, jak je uvedeno níže.
$ vim makefile getinfo:getname.o getaccno.o main.o header.h cc -o getinfo getname.o getaccno.o main.o header.h main.o:main.c cc -c main.c getaccno.o:getaccno.c cc -c getaccno.c getname.o:getname.c cc -c getname.c
Nakonec spusťte příkaz make, jak je ukázáno níže.
$ make getinfo
Poznámka: Pokaždé, když je vyvolán příkaz make, zkontroluje a zkompiluje pouze soubor, který je upraven. To je obrovské pro programátory v jazyce C, kde obvykle mají více souborů C a během fáze vývoje několikrát kompilují celý projekt.
Můžete také použít gdb k ladění programů C.
3. Přidat cíl pro proces čištění
Do souboru makefile (nebo Makefile) můžete také přidat cíl pro vyčištění souborů objektů, jak je znázorněno níže.
clean : rm getname.o getaccno.o main.o
Nyní můžete vyčistit soubory objektů z aktuálního adresáře, jak je znázorněno níže.
$ make clean
Poznámka: Místo zadání jednotlivého souboru *.o v příkazu rm můžete také zadat rm *.o.
Můžete také vytvořit archivní soubory C (*.a) pomocí příkazu ar.
4. Variable Handling v Makefile
Uvnitř makefile (nebo Makefile) můžete použít proměnné, které lze použít v celém makefile. Příklad použití je uveden níže, kde $obj obsahuje všechny názvy objektových souborů.
$ vim makefile obj= getname.o getaccno.o main.o getinfo: $(obj) header.h cc -o getinfo getname.o getaccno.o main.o header.h main.o:main.c cc -c main.c getaccno.o:getaccno.c cc -c getaccno.c getname.o:getname.c cc -c getname.c clean: rm getinfo $(obj)
5. Další zjednodušení Makefile
Nástroj Make implicitně vyvolá příkaz cc -c ke generování souborů .o pro odpovídající soubor .c. Opravdu nemusíme specifikovat „cc -c“ uvnitř makefile. Můžeme tedy přepsat makefile, aby odrážel toto implicitní pravidlo, jak je ukázáno níže.
$ vim makefile obj= getname.o getaccno.o main.o getinfo: $(obj) header.h cc -o getinfo getname.o getaccno.o main.o header.h main.o: getaccno.o: getname.o: clean: rm getinfo $(obj)
6. Vložte ladicí zprávy do Makefile
Když kompilujete velký projekt, možná budete chtít zobrazit nějakou přátelskou zprávu. Nástroj Make může tisknout zprávy na standardní výstup, což vám může pomoci odladit případné problémy v procesu make. Použijte @echo prohlášení v celém makefile, jak je uvedeno níže k zobrazení vlastních zpráv.
$ vim makefile obj= getname.o getaccno.o main.o getinfo: $(obj) header.h cc -o getinfo getname.o getaccno.o main.o header.h @echo "make complete." main.o: getaccno.o: getname.o: clean: rm getinfo $(obj) @echo "getinfo, $(obj) files are removed."
Tady to máš. Značka už není záhadou. Pokud se vám tento článek líbil, uložte si jej do záložek v Delicious, nebo o něj zakopněte.