A Linux készítsenek A parancsot program- és fájlok csoportjainak felépítésére és karbantartására használják a forráskódból. Linuxban ez a fejlesztők egyik leggyakrabban használt parancsa. Segíti a fejlesztőket számos segédprogram telepítésében és fordításában a terminálról. Továbbá kezeli a jelentős projektek összeállítási folyamatát. Időt takarít meg az összeállításhoz.
A make parancs fő motívuma egy nagy program részekre bontása és annak ellenőrzése, hogy kell-e újrafordítani vagy sem. Ezenkívül kiadja az újrafordításhoz szükséges parancsokat.
Ebben a részben C++ programokat fogunk használni, mivel a C++ programozási nyelv egy objektumorientált nyelv, de bármilyen, a gépére telepített nyelv használható. Nem csak a programokra korlátozódik; más feladatok leírására is használhatjuk.
Hogyan működik a make parancs?
A make parancs a célokat argumentumként veszi fel. Ezek az argumentumok a 'Makefile'-ben vannak megadva. A makefile tartalmazza a célokat, valamint az ezekhez kapcsolódó műveleteket.
Amikor végrehajtjuk a make parancsot, megkeresi a makefile-t, és megvizsgálja, hogy megtalálja a célt, és hozzáférjen a függőségeihez. Ha a függőségek nincsenek megadva, akkor megkeresi a függőséget, és létrehozza azt. A függőségek felépítése után megépíti a fő célt.
Például, ha csak egy forrásfájlt szeretnénk megváltoztatni, és végrehajtjuk a make parancsot; tehát ez csak a forrásfájlhoz kapcsolódó objektumfájlt fordítja le. Rengeteg időt takarít meg a projekt végső összeállításánál.
Mi az a Makefile?
A make parancs meghívja a makefile végrehajtását. Ez egy speciális fájl, amely tartalmazza a projekt karbantartására létrehozott shell-parancsokat. A makefile célokat és végrehajtási parancsokat tartalmaz. Egynél több makefile létrehozása nem megengedett. Ajánlott külön könyvtárat létrehozni hozzá.
Nyomon követi a legutóbbi fájlokat, ezért csak azokat frissítse, amelyekre szükség van. Ha egy nagy programunk van sok forrásfájllal, akkor az összes függő fájlt újra kell fordítanunk. Tehát ez rendkívül időigényes folyamat lehet.
A makefile szabványlistát tartalmaz. Ezek a szabványok segítenek a rendszernek abban, hogy megértse, milyen parancsot akarunk végrehajtani. Ezek a szabványok két részből állnak, és egy új sor választja el őket. Az első sor az a függőségi vonal, és a következő sorokat úgy tekintjük cselekvések vagy parancsok s. Az új sorban a parancsokat tabulátor választja el.
A függőségek adja meg az egyes fájlok kapcsolatát a forrásfájlokkal. És a cél egy végrehajtható fájl, és a make parancs végrehajtása után jön létre.
Lehetőségek
A make parancs különféle opciókat tesz lehetővé, hogy pontosabbá tegye. Néhány fontos lehetőség a következő:
tegye a -p -f/dev/null értékre.
Nézzünk meg néhány példát a make parancsra. Látni fogjuk a makefile alaphasználatát, majd létrehozunk néhány c++ programot és egy makefile-t. Néhány műveletet végrehajtunk rajtuk, hogy jobban megértsük a make parancsot.
mac operációs rendszerek
A make parancs alapvető használata
Ismerjük meg a make parancs alapvető használatát, és segíthet megérteni, hogyan működik.
Hozzon létre egy 'projekt' könyvtárat, és módosítsa a könyvtárat. Vegye figyelembe az alábbi parancsokat:
mkdir project cd project
Most hozzon létre a 'Makefile' a következő tartalommal rendelkezik az első programhoz:
say_hello: echo 'Hello World!'
A fenti fájlból a say_hello egy olyan cél, amely bármely programozási nyelvben függvényként viselkedik, és az echo műveletnek minősül. Emlékeztetni kell arra, hogy a műveletet az a segítségével kell megírni TAB. A cél és a cselekvés együtt alkot egy szabályt a makefile számára. Most hajtsa végre a make parancsot az alábbiak szerint:
Vegye figyelembe az alábbi kimenetet:
A fenti kimenetből láthatjuk, hogy maga a visszhangművelet jelenik meg. Ha nem akarjuk megjeleníteni az echo parancsot a kimeneten, akkor hajtsa végre az echo-t a következővel kezdve '@' szimbólum. A visszhang elnyomásához frissítse a makefile tartalmát az alábbiak szerint:
say_hello: @echo 'Hello World!'
Vegye figyelembe az alábbi kimenetet:
A cél lehet egy bináris fájl, amely a műveletektől függ.
Adjunk hozzá még néhány célt, például generálást és listázást a makefile-ban. Frissítse a makefile-t az alábbiak szerint:
say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
Ha végrehajtjuk a make parancsot, akkor csak az első célt hajtja végre, mert ez a makefile alapértelmezett célja. Vegye figyelembe az alábbi kimenetet:
Megváltoztathatjuk az alapértelmezett célt az alábbi tartalom felvételével a makefile-unkba:
dfa automata példák
.DEFAULT_GOAL := generate
Adja hozzá a fájl első sorához a következőképpen:
A fenti makefile a „generate”-t tekinti alapértelmezett célnak. Hajtsa végre a make parancsot, és az a következőképpen adja ki a kimenetet:
Az ALAPÉRTELMEZETT CÉL beállítás csak egy célt hajt végre, hogy egynél több célt adjon meg az összes beállítás használatához. Egynél több cél megadásához frissítse a makefile első sorát az alábbiak szerint:
all: say_hello generate
Ez végrehajtja a megadott célt. Vegye figyelembe az alábbi kimenetet:
Van egy másik lehetőség, amely lehetővé teszi az összes cél végrehajtását. Ha a makefile összes célját szeretnénk végrehajtani, frissítsük a fájlt az alábbiak szerint:
.PHONY: all say_hello generate list say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
A fenti fájl végrehajtja az összes megadott célt. Hajtsa végre a make parancsot, vegye figyelembe az alábbi kimenetet:
A make parancs speciális használata
Hozzunk létre egy C++ projektet main.cpp, function1.cpp, function2.cpp fájlokkal és egy function.h függőségi fájllal.
A fájlok kódja a következő:
válasszon több sql táblából
main.cpp:
#include #include 'functions.h' int main() { print_hello(); std::cout<< std::endl; std::cout<< 'The factorial of 5 is' << factorial(5) << std:: endl; return 0; }
function1.cpp:
#include 'functions.h' int factorial(int n) { if(n!=1) { return (n * factorial(n-1)); } else return 1; }
function2.cpp:
#include #include 'functions.h' void print_hello() { std::cout << 'Hello World'; }
functions.h:
void print_hello(); int factorial (int n);
Most hozzon létre egy végrehajtható fájlt a fenti projektből az alábbi parancs végrehajtásával:
g++ main.cpp function1.cpp function2.cpp -o hello
A fenti parancs végrehajtható fájlt hoz létre 'Helló' a main.cpp, function1.cpp és function2.cpp fájlok közül.
Vegye figyelembe az alábbi kimenetet:
A fenti kimenetből, ha sikeresen lefut, nem ad semmilyen kimenetet.
Végezzük el ugyanezt a feladatot a makefile használatával.
Hozzon létre egy fájlt mint Makefile és tedd bele az alábbi kódot.
all: g++ main.cpp function1.cpp function2.cpp -o hello
Az all kulcsszót a célként használjuk, és az új sorba ugyanazt a parancsot írjuk be TAB-bal, mint fent a művelet megadásához. Mentse el a fájlt. Vegye figyelembe az alábbi fájlt:
A működéshez hajtsa végre a parancsot az alábbiak szerint:
java a huroktípusokhoz
make
A fenti parancs a megadott fájlok közül egy 'hello' futtatható fájlt hoz létre. Vegye figyelembe az alábbi kimenetet:
Adjunk hozzá még néhány feladatot a Makefile-hoz. Adjon hozzá egy feladatot 'összeállítás' alábbiak szerint:
all: compile: g++ main.cpp function1.cpp function2.cpp -o hello
A feladat végrehajtásához összeállítani, hajtsa végre az alábbi parancsot:
make compile
A fenti parancs végrehajtja a fordítási feladatot. Vegye figyelembe az alábbi kimenetet:
Végezzünk el még néhány feladatot a makefile-unkon.
frissítse a Makefile-t az alábbiak szerint:
all: hello hello: main.o function1.o function2.o g++ main.o function1.o function2.o -o hello main.o: main.cpp g++ -c main.cpp function1.o: function1.cpp g++ -c function1.cpp function2.o: function2.cpp g++ -c function2.cpp clean: rm -rf *o hello
A fenti makefile-ből három objektumot hoztunk létre main.o, function1.o és function2.o néven. Továbbá megadtuk a main.o, function1.o és function2.o célok függőségeit main.cpp, function1.cpp és function2.cpp néven. Az összes célpont elvégzi a megadott feladatokat benne. Meghatároztunk egy tiszta célt is az összes függőség megtisztításához és a végrehajtható fájl eltávolításához.
Most hajtsa végre a make all parancsot az új makefile végrehajtásához.
make all
Vegye figyelembe az alábbi kimenetet:
A fenti kimenetből láthatjuk, hogy a parancs először végrehajtotta a main.o, function1.o és function2.o fájlokat. Ez létrehozza az adott fájlok végrehajtható és objektumfájlját. Nem hajtja végre a tiszta célt, mert nem adtuk meg a hello-ban. Vegye figyelembe az alábbi fájlokat:
A make parancsnak egyenesen előrehaladó munkafolyamata van. Végrehajtotta az összes opciót, és a hello-ra ment. A hello végrehajtása után a megadott sorrendben beolvassa a célt. Minden célpontot és annak függőségét átkutatta, és sorrendben végrehajtotta.
Az objektumok és a végrehajtható fájl eltávolításához hajtsa végre a tisztítási feladatot. A tisztítási feladat végrehajtásához hajtsa végre a következő parancsot:
make clean
Vegye figyelembe az alábbi kimenetet:
A fenti parancs eltávolítja az összes objektumot és végrehajtható fájlt. Tekintse meg a könyvtár alábbi képét:
A fenti képen láthatjuk, hogy megtisztítottuk a könyvtárunkat.
Változók a make parancsban
Meghatározhatjuk a változókat a makefile-unkban. A változók meghatározásához használja a '=' operátor. Például, ha szeretnénk létrehozni egy A változót, és hozzá szeretnénk rendelni egy gcc parancsot, akkor a következőképpen rendeljük hozzá:
osi referenciamodell a hálózatépítésben
A=g++
Használja a következőképpen a makefile-unkban:
hello: hello.cpp ${A} hello.cpp -o hello
Ez a következőképpen kerül át a terminálba:
g++ hello.cpp -o hello
${A} helyett használhatjuk a $(A)-t, mivel mindkettőt ugyanúgy kezeli a szkript.
Megjegyzések a makefile-ban
Ha megjegyzést szeretne hozzáadni a makefile-hez, használja a '#' szimbólum. Ha például megjegyzést szeretne hozzáadni a fordítási szakaszhoz, adja hozzá a következőként '# Ezzel lefordítja a programot .' A megjegyzéseket a fordító figyelmen kívül hagyja.