Linux зробити Команда використовується для створення та підтримки груп програм і файлів із вихідного коду. У Linux це одна з найбільш часто використовуваних команд розробниками. Він допомагає розробникам установлювати та компілювати багато утиліт з терміналу. Крім того, він керує процесом компіляції великих проектів. Це економить час компіляції.
Основний мотив команди make полягає в тому, щоб розділити велику програму на частини та перевірити, чи потрібно її перекомпілювати чи ні. Крім того, він видає необхідні накази для їх перекомпіляції.
У цьому розділі ми будемо використовувати програми C++, оскільки мова програмування C++ є об’єктно-орієнтованою мовою, але ви можете використовувати будь-яку мову, встановлену на вашому комп’ютері. Він не обмежується лише програмами; ми можемо використовувати його також для опису інших завдань.
Як працює команда make?
Команда make приймає цілі як аргументи. Ці аргументи вказуються у «Makefile». Make-файл містить цілі, а також пов’язані дії, пов’язані з цими цілями.
Коли ми виконуємо команду make, вона шукає make-файл і сканує його, щоб знайти ціль і отримати доступ до його залежностей. Якщо залежності не вказано, вона шукатиме залежність і створюватиме її. Він створить основну ціль після створення залежностей.
Наприклад, якщо ми хочемо змінити лише один вихідний файл і виконуємо команду make; отже, це скомпілює лише той об’єктний файл, який пов’язаний із цим вихідним файлом. Це заощадить багато часу при остаточному складанні проекту.
Що таке Makefile?
Команда make викликає виконання make-файлу. Це спеціальний файл, який містить команди оболонки, які ми створюємо для підтримки проекту. Макейний файл містить цілі та команди для виконання. Не дозволяється створювати більше одного make-файлу. Рекомендується створити для нього окремий каталог.
Він відстежує останні файли, тому оновлюйте лише ті файли, які потрібні. Якщо у нас є велика програма з багатьма вихідними файлами, ми повинні перекомпілювати всі залежні файли. Отже, це може бути надзвичайно тривалий процес.
Makefile містить список стандартів. Ці стандарти допомагають системі зрозуміти, яку команду ми хочемо виконати. Ці стандарти складаються з двох частин і розділені новим рядком. Перший рядок є лінія залежності, а наступні рядки розглядаються як дії або команди с. У новому рядку команди розділені табуляцією.
The залежності вкажіть зв'язок кожного файлу з вихідними файлами. І мета є виконуваним файлом і створюється після виконання команди make.
Опції
Команда make полегшує різні параметри, щоб зробити його більш конкретним. Деякі важливі параметри:
make -p -f/dev/null.
Давайте розберемо кілька прикладів команди make. Ми побачимо базове використання makefile, а далі ми створимо кілька програм на C++ і makefile. Ми виконаємо над ними деякі операції, щоб краще зрозуміти команду make.
ins ключ
Базове використання команди make
Давайте розберемося з базовим використанням команди make, і це може допомогти вам зрозуміти, як вона працює.
Створіть каталог «проект» і змініть його каталог. Розгляньте наведені нижче команди:
mkdir project cd project
Тепер створіть a 'Makefile' має наступний вміст для першої програми:
say_hello: echo 'Hello World!'
З наведеного вище файлу say_hello — це ціль, яка поводиться як функція в будь-якій мові програмування, а відлуння вважатиметься дією. Слід пам'ятати, що дію слід писати за допомогою a TAB. Ціль і дія разом створюють правило для make-файлу. Тепер виконайте команду make наступним чином:
Розглянемо наведений нижче результат:
З наведеного вище результату ми бачимо, що відображається сама операція ехо. Якщо ми не хочемо відображати команду echo на виході, виконайте echo, починаючи з '@' символ. Щоб придушити відлуння, оновіть вміст makefile наступним чином:
say_hello: @echo 'Hello World!'
Розглянемо наведений нижче результат:
Ціллю може бути двійковий файл, який залежить від дій.
Давайте додамо ще кілька цілей, як-от генерація та список у make-файлі. Оновіть make-файл наступним чином:
рівність рядків у java
say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
Якщо ми виконуємо команду make, вона виконує лише першу ціль, оскільки це ціль за замовчуванням у make-файлі. Розглянемо наведений нижче результат:
Ми можемо змінити ціль за замовчуванням, включивши наведений нижче вміст до нашого make-файлу:
.DEFAULT_GOAL := generate
Додайте його до першого рядка файлу таким чином:
Вищезазначений make-файл розглядатиме «generate» як ціль за замовчуванням. Виконайте команду make, і вона видасть наступний результат:
Параметр DEFAULT GOAL виконуватиме лише одну ціль, щоб указати більше однієї цілі для використання всіх параметрів. Щоб указати кілька цілей, оновіть перший рядок make-файлу наступним чином:
all: say_hello generate
Він виконає вказану ціль. Розглянемо наведений нижче результат:
Є інший варіант, який дозволяє виконати всі цілі. Якщо ми хочемо виконати всі цілі make-файлу, оновіть файл наступним чином:
.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
Наведений вище файл виконуватиме всі вказані цілі. Виконайте команду make, розгляньте наведений нижче результат:
Розширене використання команди make
Давайте створимо проект C++ з файлами main.cpp, function1.cpp, function2.cpp і файлом залежностей function.h.
Код файлів такий:
різниця дат в excel
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; }
функція1.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);
Тепер створіть виконуваний файл вищезазначеного проекту, виконавши наведену нижче команду:
g++ main.cpp function1.cpp function2.cpp -o hello
Наведена вище команда створить виконуваний файл 'привіт' файлів main.cpp, function1.cpp і function2.cpp.
Розглянемо наведений нижче результат:
З наведеного вище виводу, якщо він успішно виконаний, він не дасть жодного виводу.
Давайте виконаємо те саме завдання за допомогою make-файлу.
Створити файл як Makefile і вставте в нього наведений нижче код.
all: g++ main.cpp function1.cpp function2.cpp -o hello
Ключове слово all використовується для target, а в новому рядку вставте ту саму команду з TAB, що й вище, щоб визначити операцію. Збережіть файл. Розглянемо файл нижче:
Для роботи виконайте команду наступним чином:
список проти набору в java
make
Наведена вище команда створить виконуваний файл «hello» із зазначених файлів. Розглянемо наведений нижче результат:
Давайте додамо ще декілька завдань до Makefile. Додайте завдання 'компіляція' наступним чином:
all: compile: g++ main.cpp function1.cpp function2.cpp -o hello
Щоб виконати завдання компілювати, виконайте наведену нижче команду:
make compile
Наведена вище команда виконає завдання компіляції. Розглянемо наведений нижче результат:
Давайте виконаємо ще кілька завдань для нашого make-файлу.
оновіть Makefile наступним чином:
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
З наведеного вище make-файлу ми створили три об’єкти: main.o, function1.o та function2.o. Крім того, ми надали залежності для цілей main.o, function1.o і function2.o як main.cpp, function1.cpp і function2.cpp відповідно. У ньому всі мішені виконуватимуть задані завдання. Ми також вказали чисту ціль, щоб очистити всі залежності та видалити виконуваний файл.
Тепер виконайте команду make all, щоб запустити наш новий make-файл.
make all
Розглянемо наведений нижче результат:
З наведеного вище результату ми бачимо, що команда спочатку виконала main.o, function1.o та function2.o відповідно. Він створить виконуваний файл і файл об’єктів із заданих файлів. Він не виконає чисту ціль, оскільки ми не вказали її в hello. Розглянемо файли нижче:
Команда make має простий робочий процес. Він виконав опцію all і перейшов до hello. Після виконання hello він зчитує ціль у вказаній послідовності. Він шукав кожну ціль і її залежність і виконував їх у послідовності.
Щоб видалити об’єкти та виконуваний файл, виконайте завдання очищення. Щоб виконати завдання очищення, виконайте таку команду:
make clean
Розглянемо наведений нижче результат:
Наведена вище команда видалить усі об’єкти та виконувані файли. Перегляньте наведений нижче знімок каталогу:
На зображенні вище ми бачимо, що ми очистили наш каталог.
Змінні в команді make
Ми можемо визначити змінні в нашому make-файлі. Щоб визначити змінні, використовуйте '=' оператор. Наприклад, якщо ми хочемо створити змінну A та призначити їй команду gcc, призначте її як:
основна мова java
A=g++
Використовуйте його таким чином у нашому make-файлі:
hello: hello.cpp ${A} hello.cpp -o hello
Він передається на термінал як:
g++ hello.cpp -o hello
Ми можемо використовувати $(A) замість ${A}, оскільки обидва обробляються сценарієм однаково.
Коментарі в makefile
Щоб додати коментар до make-файлу, використовуйте '#' символ. Наприклад, щоб додати коментар у розділ компіляції, додайте його як '# Це призведе до компіляції програми .' Коментарі ігноруються компілятором.