GNU/Linux >> Znalost Linux >  >> Linux

Zvládneš to? Kompilace programů C v systému Linux pomocí příkazu Make

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.


Linux
  1. Použití příkazu ripgrep (rg) v Linuxu

  2. Jak zabít proces v Linuxu pomocí příkazu?

  3. 5 Praktické příklady příkazů linuxové fixační jednotky

  1. Jak ladit programy C v Linuxu pomocí gdb

  2. Příklady použití příkazu dmsetup v Linuxu

  3. Přesuňte složku v Linuxu pomocí příkazu mv

  1. Použití Linux Sleep Command ve skriptech Bash

  2. Jak restartovat Linux pomocí příkazového řádku

  3. Jak najdu svou verzi shellu pomocí příkazu Linux?