logo

Линук маке цомманд

Линук направити команда се користи за прављење и одржавање група програма и датотека из изворног кода. У Линуку, то је једна од најчешће коришћених команди од стране програмера. Помаже програмерима да инсталирају и компајлирају многе услужне програме са терминала. Даље, управља процесом компилације великих пројеката. То штеди време компилације.

Главни мотив команде маке је да се велики програм раздвоји на делове и да се провери да ли га треба поново компајлирати или не. Такође, издаје потребне наредбе за њихово поновно компајлирање.

У овом одељку ћемо користити Ц++ програме пошто је програмски језик Ц++ објектно оријентисан језик, али можете користити било који језик инсталиран на вашој машини. Није ограничен само на програме; можемо га користити да опишемо и друге задатке.

Како функционише команда маке?

Команда маке узима циљеве као аргументе. Ови аргументи су наведени у 'Макефиле'. Макефиле садржи циљеве као и повезане радње које се односе на ове циљеве.

Када извршимо наредбу маке, она тражи макефиле и скенира га да пронађе циљ и приступи његовим зависностима. Ако зависности нису наведене, тражиће зависност и изградиће је. Он ће изградити главни циљ након што се изграде зависности.

На пример, ако желимо да променимо само један изворни фајл и извршимо команду маке; тако да ће ово компајлирати само објектни фајл који је повезан са том изворном датотеком. То ће уштедети много времена у коначној компилацији пројекта.

Шта је Макефиле?

Команда маке позива извршавање макефиле-а. То је посебна датотека која садржи команде љуске које креирамо за одржавање пројекта. Макефиле садржи циљеве и команде за извршење. Није дозвољено креирати више од једне макефиле. Препоручује се да направите посебан директоријум за њега.

Прати недавне датотеке, тако да ажурирате само оне датотеке које су потребне. Ако имамо велики програм са много изворних датотека, морамо поново компајлирати све зависне датотеке. Дакле, то може бити изузетно дуготрајан процес.

Макефиле има листу стандарда. Ови стандарди су од помоћи систему да разуме коју наредбу желимо да извршимо. Ови стандарди су из два дела и одвојени новом линијом. Прва линија је линија зависности, а наредни редови се сматрају као акције или команде с. Команде су одвојене табулатором у новом реду.

Тхе зависности наведите однос сваке датотеке са изворним датотекама. И тхе циљ је извршна датотека, а креира се након извршења команде маке.

Опције

Наредба маке олакшава различите опције како би је учинила конкретнијом. Неке важне опције су следеће:

    -б, -м:Ове опције се користе за игнорисање компатибилности за различите верзије команде маке.-Б, --увек-направи:Ове опције се користе да се безусловно праве све мете.-Ц директоријум, --дирецтори=дир:Ове опције се користе за промену директоријума пре извршавања макефиле-а.-д:Користи се за штампање информација о отклањању грешака.--дебуг[=ФЛАГС]:Користи се за штампање информација за отклањање грешака заједно са нормалном обрадом. Ако прескочимо заставицу, она ће показати сличне резултате као опција '-д'.-е, --енвиронмент-оверриде:Користи се за обезбеђивање променљивих преузетих од приоритета окружења у макефиле.-ф датотека, --филе=датотека, --макефиле=ДАТОТЕКА:Користи се за коришћење датотеке као макефиле.-и, --игноре-еррорс:Опција '-и' се користи за игнорисање свих грешака у командама.-И дир, --инцлуде-дир=дир:Користи се за одређивање директоријума за тражење наведене макефиле. Ако наведемо много '-И' опција, претраживаће се у многим директоријумима по редоследу који су наведени.-ј [послови], --послови[=послови]:Користи се за одређивање броја послова који се извршавају истовремено. Ако дамо много '-ј' опција, сматраће се да се последња извршава. Ако не наведемо број послова, то неће ограничити послове који се могу извршавати истовремено.-к, --настави:Користи се за наставак програма што је више могуће након добијања грешке.-л [учитавање], --лоад-просек[=учитавање]:Користи се за спецификацију да ниједан нови задатак не треба да се покреће ако су други задаци у реду и ако је просек оптерећења на минимуму.-н, --само штампај, --дри-рун, --рецон:Користи се за приказ команде која би била покренута.-о фајл, --олд-филе=филе, --ассуме-олд=филе:Користи се да би се осигурало да маке неће преправити датотеку чак и ако је старија од њених зависности.-О[тип], --оутпут-синц[=тип]:Користи се да потврди да је резултат сваког задатка спојен, а не да се међусобно мешају резултати других задатака. Користан је за вишеструку обраду послова са опцијом '-ј'.-п, --принт-база-података:Користи се за штампање базе података која се производи након читања маке фајлова. Такође је корисно одштампати информације о верзији када се користи са опцијом '-в'. Да бисте одштампали базу података без покушаја да преправите датотеке, извршите наредбу на следећи начин:
    направи -п -ф/дев/нулл.-к, --питање:Опција '-к' се користи за Режим питања. Неће покренути ниједну команду нити било шта штампати. Само ће вратити статус излаза нула ако је наведени циљ већ синхронизован; у супротном, приказаће излазни статус различит од нуле.-р, --без уграђених правила:Користи се да елиминише употребу уграђених имплицитних правила.-Р, --без уграђених променљивих:Корисно је ако не желимо да дефинишемо ниједну уграђену променљиву.-с, --тихо, --тихо:Ове опције се зову Тиха операција. Ограничава штампање команди док се извршавају.-С, --без-наставак, --стоп:Користи се за поништавање ефекта операције '-к, --кееп-гоинг'.-т, --додирни:Користи се за додиривање датотека уместо за покретање њихових команди.--траг:Користи се за праћење диспозиције сваке мете.-в, --верзија:Користи се за штампање инсталиране верзије услужног програма маке. Даље, приказује листу аутора, ауторска права и нека обавештења у вези са услужним програмом маке.-в, --принт-директоријум:Користи се за праћење штампане поруке која садржи радни директоријум пре и после друге обраде. Корисно је пронаћи грешке из компликоване структуре рекурзивне команде маке.--но-принт-дирецтори:Користи се за искључивање опције '-в'.-В датотека, --вхат-иф=филе, --нев-филе=филе, --ассуме-нев=филе:Ове опције се претварају да је циљна датотека управо измењена.--варн-ундефинед-вариаблес:Ова опција се користи за упозорење да је референцирана недефинисана променљива.

Хајде да разумемо неке примере команде маке. Видећемо основну употребу макефиле-а, а даље ћемо креирати неке Ц++ програме и макефиле. Извршићемо неке операције на њима да бисмо боље разумели команду маке.

јава визуализатор

Основна употреба команде маке

Хајде да разумемо саму основну употребу команде маке, и можда ће вам помоћи да разумете како она функционише.

Креирајте 'пројекат' директоријума и промените директоријум у њега. Размотрите следеће команде:

 mkdir project cd project 

Сада креирајте а 'Макефиле' који има следећи садржај за први програм:

 say_hello: echo 'Hello World!' 

Из горње датотеке, саи_хелло је циљ који се понаша као функција у било ком програмском језику, а ехо ће се сматрати акцијом. Мора се имати на уму да радњу треба писати коришћењем а ТАБ. Циљ и акција заједно стварају правило за макефиле. Сада извршите команду маке на следећи начин:

Размотрите доњи излаз:

Линук маке цомманд

Из горњег излаза можемо видети да се приказује сама операција еха. Ако не желимо да прикажемо команду ецхо на излазу, извршимо ецхо почевши од '@' симбол. Да бисте потиснули ехо, ажурирајте садржај макефиле-а на следећи начин:

 say_hello: @echo 'Hello World!' 

Размотрите доњи излаз:

Линук маке цомманд

Циљ може бити бинарна датотека која зависи од радњи.

Хајде да додамо још неколико циљева, као што су генерисање и листање у макефилеу. Ажурирајте макефиле на следећи начин:

 say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls 

Ако извршимо наредбу маке, она извршава само први циљ јер је то подразумевани циљ макефиле-а. Размотрите доњи излаз:

Линук маке цомманд

Можемо да променимо подразумевани циљ тако што ћемо укључити садржај испод у наш макефиле:

селен туториал јава
 .DEFAULT_GOAL := generate 

Додајте га у први ред датотеке на следећи начин:

Линук маке команда

Горњи макефиле ће сматрати 'генерисање' као подразумевани циљ. Извршите команду маке и она ће дати резултат на следећи начин:

Линук маке цомманд

Опција ДЕФАУЛТ ГОАЛ ће извршити само један циљ да одреди више од једног циља за коришћење свих опција. Да бисте навели више од једног циља, ажурирајте први ред макефиле-а на следећи начин:

 all: say_hello generate 

Извршиће наведени циљ. Размотрите доњи излаз:

Линук маке цомманд

Постоји још једна опција која нам омогућава да извршимо све циљеве. Ако желимо да извршимо све циљеве макефиле-а, ажурирајте датотеку на следећи начин:

 .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 

Горња датотека ће извршити све наведене циљеве. Извршите команду маке, узмите у обзир следећи излаз:

Линук маке цомманд

Напредно коришћење команде маке

Хајде да направимо Ц++ пројекат који има датотеке маин.цпп, фунцтион1.цпп, фунцтион2.цпп и датотеку зависности фунцтион.х.

Код датотека је следећи:

лоцалдате јава

маин.цпп:

 #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; } 

фунцтион1.цпп:

 #include 'functions.h' int factorial(int n) { if(n!=1) { return (n * factorial(n-1)); } else return 1; } 

фунцтион2.цпп:

 #include #include 'functions.h' void print_hello() { std::cout << 'Hello World'; } 

функције.х:

 void print_hello(); int factorial (int n); 

Сада креирајте извршну датотеку горњег пројекта тако што ћете извршити наредбу испод:

 g++ main.cpp function1.cpp function2.cpp -o hello 

Горња команда ће креирати извршну датотеку 'Здраво' од датотека маин.цпп, фунцтион1.цпп и фунцтион2.цпп.

Размотрите доњи излаз:

Линук маке команда

Из горњег излаза, ако се успешно изврши, неће дати никакав излаз.

Хајде да извршимо исти задатак користећи макефиле.

Направите датотеку као Макефиле и ставите доњи код у њега.

 all: g++ main.cpp function1.cpp function2.cpp -o hello 

Кључна реч алл се користи за циљ и у новом реду ставите исту команду са ТАБ као горе да бисте одредили операцију. Сачувајте датотеку. Размотрите датотеку испод:

Линук маке цомманд

За рад, извршите наредбу на следећи начин:

поново покрените мискл убунту
 make 

Горња команда ће креирати извршну датотеку 'здраво' од наведених датотека. Размотрите доњи излаз:

Линук маке цомманд

Хајде да додамо још неке задатке у Макефиле. Додајте задатак 'саставити' као што следи:

 all: compile: g++ main.cpp function1.cpp function2.cpp -o hello 

Да изврши задатак саставити, изврши наредбу испод:

 make compile 

Горња команда ће извршити задатак компајлирања. Размотрите доњи излаз:

Линук маке команда

Хајде да извршимо још неке задатке за наш макефиле.

ажурирајте Макефиле на следећи начин:

 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 

Из горњег макефајла направили смо три објекта као маин.о, фунцтион1.о и фунцтион2.о. Даље, обезбедили смо зависности за циљеве маин.о, фунцтион1.о и фунцтион2.о као маин.цпп, фунцтион1.цпп и фунцтион2.цпп респективно. Све мете ће обављати наведене задатке унутар њега. Такође смо навели чист циљ за чишћење свих зависности и уклањање извршне датотеке.

Сада извршите команду маке алл да бисте извршили наш нови макефиле.

 make all 

Размотрите доњи излаз:

Линук маке команда

Из горњег излаза можемо видети да је команда прво извршила маин.о, фунцтион1.о и фунцтион2.о респективно. Креираће извршну и објектну датотеку датих датотека. Неће извршити чист циљ јер га нисмо навели у хелло. Размотрите следеће датотеке:

Линук маке команда

Команда маке има директан радни процес. Извршио је опцију алл и отишао на хелло. Након извршења хелло, он је прочитао циљ у наведеном низу. Он је претраживао сваки циљ и његову зависност и извршавао их у низу.

Да бисте уклонили објекте и извршну датотеку, извршите задатак чишћења. Да бисте извршили задатак чишћења, извршите наредбу на следећи начин:

 make clean 

Размотрите доњи излаз:

Линук маке команда

Горња команда ће уклонити све објекте и извршне датотеке. Погледајте доњи снимак директоријума:

Линук маке цомманд

Са горње слике можемо видети да смо очистили наш директоријум.

Променљиве у команди маке

Можемо дефинисати променљиве у нашем макефилеу. Да бисте дефинисали варијабле, користите '=' оператер. На пример, ако желимо да креирамо променљиву А и доделимо јој команду гцц, доделите је као:

низ у низу
 A=g++ 

Користите га на следећи начин у нашем макефилеу:

 hello: hello.cpp ${A} hello.cpp -o hello 

Пребацује се на терминал као:

 g++ hello.cpp -o hello 

Можемо да користимо $(А) уместо ${А}, пошто скрипта и једно и друго третира исто.

Коментари у макефилеу

Да бисте додали коментар у макефиле, користите '#' симбол. На пример, да бисте додали коментар у одељак за превођење, додајте га као '# Ово ће компајлирати програм .' Компајлер игнорише коментаре.