GNU/Linux >> Znalost Linux >  >> Linux

Linux dělá příkaz vysvětlený s příklady

Značka command v Linuxu je jedním z nejčastěji používaných příkazů systémovými administrátory a programátory. I když pomáhá správcům při kompilaci a instalaci mnoha open source utilit prostřednictvím příkazového řádku, programátoři jej používají ke správě kompilace svých velkých a komplikovaných projektů. V tomto článku probereme vnitřní fungování značky příkaz spolu s několika praktickými příklady.

Jak vyrobit Příkaz funguje

Pro ty, kteří to nevědí, příkaz make přijímá cíle jako argumenty příkazového řádku. Tyto cíle jsou obvykle specifikovány v souboru s názvem 'Makefile', který také obsahuje přidruženou akci odpovídající cílům. Pro více informací si přečtěte naši sérii článků o tom, jak Makefiles fungují.

Když je příkaz make proveden úplně poprvé, prohledá Makefile, aby našel cíl (jemu dodaný) a poté přečetl jeho závislosti. Pokud jsou tyto závislosti samotné cíle, prohledá Makefile tyto cíle a vytvoří jejich závislosti (pokud existují) a poté je sestaví. Jakmile jsou vytvořeny hlavní závislosti, pak sestaví hlavní cíl (který byl předán příkazu make).

Nyní předpokládejme, že provedete změny pouze v jednom zdrojovém souboru a znovu provedete příkaz make, zkompiluje pouze objektové soubory odpovídající tomuto zdrojovému souboru, a proto ušetří spoustu času při kompilaci konečného spustitelného souboru.

vytvářejte příklady příkazů

Zde jsou podrobnosti o testovacím prostředí použitém pro tento článek:

  • OS – Ubuntu 13.04
  • Shell – Bash 4.2.45
  • Aplikace – GNU Make 3.81

Níže je uveden obsah projektu:

$ ls
anotherTest.c Makefile test.c test.h

a zde je obsah souboru Makefile:

all: test

test: test.o anotherTest.o
        gcc -Wall test.o anotherTest.o -o test

test.o: test.c
        gcc -c -Wall test.c

anotherTest.o: anotherTest.c
        gcc -c -Wall anotherTest.c

clean:
        rm -rf *.o test

Nyní se podívejme na některé příklady použití příkazu make v Linuxu.

1) Jednoduchý příklad

Ke kompilaci projektu můžete buď jednoduše použít 'make' nebo můžete použít cíl 'all' s příkazem make.

$ make
gcc -c -Wall test.c
gcc -c -Wall anotherTest.c
gcc -Wall test.o anotherTest.o -o test

Takže můžete vidět, že příkaz make nejprve vytvoří závislosti a poté skutečný cíl.

Pokud se podíváte na obsah adresáře, budou v něm soubory .o a spustitelné soubory:

$ ls
anotherTest.c anotherTest.o Makefile test test.c test.h test.o

Nyní předpokládejme, že provedete nějakou změnu v test.c a znovu zkompilujete projekt pomocí make :

$ make
gcc -c -Wall test.c
gcc -Wall test.o anotherTest.o -o test

Takže můžete vidět, že je překompilován pouze test.o, zatímco jinýTest.o není překompilován.

Nyní, chcete-li vyčistit všechny soubory objektů spolu se spustitelným souborem 'test', můžete použít cíl 'clean':

$ make clean
rm -rf *.o test

$ ls
anotherTest.c Makefile test.c test.h

Můžete tedy vidět, že všechny soubory .o a spustitelný 'test' byly odstraněny.

2) Vždy proveďte všechny cíle přes volbu -B

Nyní byste si pravděpodobně byli vědomi, že příkaz make nezkompiluje soubory, které se od minule nezměnily. Pokud však chcete přepsat výchozí chování značky, můžete použít volbu -B.

Zde je příklad:

$ make
make: Nothing to be done for `all'.

$ make -B
gcc -c -Wall test.c
gcc -c -Wall anotherTest.c
gcc -Wall test.o anotherTest.o -o test

Takže můžete vidět, že zatímco příkaz 'make' nezkompiloval žádný soubor, 'make -B' násilně zkompiloval všechny objekty spolu s konečným spustitelným souborem.

3) Vytiskněte informace o ladění pomocí volby -d

Pokud chcete podrobný popis toho, co příkaz make skutečně dělá, když je spuštěn, použijte volbu -d.

Zde je příklad:

$ make -d | more
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-pc-linux-gnu
Reading makefiles...
Reading makefile `Makefile'...
Updating makefiles....
Considering target file `Makefile'.
Looking for an implicit rule for `Makefile'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.o'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.c'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.cc'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.C'.
Trying pattern rule with stem `Makefile'.
Trying implicit prerequisite `Makefile.cpp'.
Trying pattern rule with stem `Makefile'.
--More--

Je to dlouhý výstup. Můžete vidět, že jsem použil více příkaz pro zobrazení výstupu stránku po stránce. Musíte to vidět sami, abyste si udělali lepší představu o detailech, které je tato možnost schopna vyprodukovat.

4) Změňte adresář pomocí volby -C

Příkazu make můžete poskytnout jinou cestu k adresáři, do které by se přepnul před hledáním souboru Makefile.

Zde je příklad. Předpokládejme, že se aktuálně nacházíte v tomto adresáři:

$ ls
file file2 frnd frnd1.cpp log1.txt log3.txt log5.txt
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt

Ale chcete spustit make se souborem Makefile uloženým na ../make-dir/. Takže tady je to, co musíte udělat:

$ make -C ../make-dir/
make: Entering directory `/home/himanshu/practice/make-dir'
make: Nothing to be done for `all'.
make: Leaving directory `/home/himanshu/practice/make-dir'

Můžete tedy vidět, že se příkaz make přepnul do určeného adresáře, tam se provedl a pak se přepnul zpět.

5) S jakýmkoli jiným souborem zacházet jako s 'Makefile' přes volbu -f

Pokud chcete přejmenovat svůj Makefile, řekněme 'my_makefile' nebo jakýkoli jiný název, a chcete, aby s ním příkaz make zacházel jako s výchozím 'Makefile', můžete k tomu použít volbu -f.

Zde je příklad:

make -f my_makefile

Tímto způsobem bude příkaz make vybírat a skenovat my_makefile místo Makefile.


Linux
  1. Příkaz vypnutí Linuxu s příklady

  2. JQ Command v Linuxu s příklady

  3. Příkaz whoami v Linuxu vysvětlený na příkladech

  1. wc Linux Command s příklady

  2. Příkaz nslookup Linux vysvětlený s příklady

  3. Příkaz Linux Traceroute, vysvětlený s příklady

  1. Linux cut Command Vysvětlení pomocí 6 příkladů

  2. Linux ip příkaz s příklady

  3. Příkaz Linux ldd vysvětlený s příklady