GNU Make

GNU Make Tutorial

GNU Make Tutorial

GNU Make е инструмент, който помага да се генерират изпълними програми от изходния код и също така да се обработват други файлове, които не са източници от проекта. Make получава логиката на изграждане на изпълними файлове и обработка на други файлове без източник от файл, наречен makefile или а Makefile.

Защо да правим?

Инсталиране на Make

Самото правене не е достатъчно за изграждане на програми. За да изградите програми от източник, трябва да имате инсталирани компилатори и други инструменти във вашата система. И така, ние се нуждаем от пълния набор от инструменти за разработка за нашата цел.

За да се компилират източници на Linux, има пакет, наречен „build-essential“ за базираните на Debian системи (напр.ж. Ubuntu, Linux Mint и др.) И „Инструменти за разработка“ на Red Hat и CentOS.

За да инсталирате това на системи, базирани на Debian:

apt-get install build-bitno

За да инсталирате това на CentOS и Red Hat:

yum groupinstall "Инструменти за разработка"

Първи стъпки с Makefile

Нека започнем, като напишем a Здравей свят програма с езика за програмиране C.

Основната функция на нашата програма C ще се намира вътре hellomain.° С. Съдържанието на файла трябва да изглежда по следния начин:

#include  int main () my_fun (); връщане 0;  

Този код включва заглавния файл hellofun.h, който съдържа декларацията на функция, наречена hello_fun (). Съдържанието на hellofun.h е:

void my_fun ();

Определението на my_fun () живее в hellofun.° С:

#include  #include  void my_fun () printf ("Hello World!\ n "); връщане;

Това е много проста програма и бихме могли да я компилираме с gcc само с един команден ред. Но програмите в реалния живот не са толкова прости и толкова малки, колкото тази. Нещата наистина се усложняват много скоро.  По-долу ще напиша необходимия makefile скрипт за съставяне на тази здравей световна програма. Ще обясня различни части от него в следващите раздели.

hellomain: хеломаин.в здравей.c gcc -o здравей hellomain.c hellomain.c -I.

Съхранявайте този код във файл, наречен makefile (без никакво разширение на файла). Поставете файла в директорията, където са C файловете. Насочете командния ред в тази директория. На командния ред напишете make и натиснете enter. В текущата директория ще бъде генериран изпълним файл, наречен hello. Можете да проверите резултата, като стартирате изпълнимия файл със следната команда.

./Здравейте

Изходи:

Здравей свят!

Правила, цели и зависимости

Makefile скриптът е колекция от правила. Правилата инструктират Направете как да изградите цел или изход от източник или други файлове. Правилото също така определя зависимости на целта. Правилата за зависимост трябва да бъдат изпълнени първо в зависимост от това дали това вече е обработено чрез преглед на времевите марки. В нашия пример makefile по-горе, имаме правило с име на име hellomain и неговите зависимости. Името на целта е разделено с двоеточие от списъка на зависимостите. Командите на черупката, които ще бъдат изпълнени, са изброени в следващия ред. Командите на черупката трябва да започват с табулатор.

Ако не зададете параметър с командата make, тогава се изпълнява първата цел. В нашия пример не посочихме никакъв параметър и имахме hellomain като първата и единствена цел.

Променливи

Променливите са чудесен начин да напишете стойност веднъж и да ги използвате многократно, без да повтаряте стойността отново и отново. Помага ни да запазим кода си СУХ (не се повтаряйте). Ако някога се наложи да промените някаква стойност в целия скрипт, просто трябва да промените това на едно място, за да отрази промяната навсякъде, ако използвате променлива.

В нашия пример използвахме gcc като компилатор, но може да се наложи да сменим компилатора на нещо друго. И така, можем да запазим името на компилатора в променлива. Също така можем да запазим флаговете на компилатора в друга променлива, за да го използваме повторно. За задаване на стойност на променлива използваме знак за равенство (=) и за четене на тази променлива използваме $ (име_променлива).

CC = gcc CFLAGS = -I. hellomain: хеломаин.c здравей.c $ (CC) -o здравей hellomain.c hellomain.c $ (CFLAGS)

Почистване на околната среда

Често може да се наложи да почистим околната среда. Ако искаме всяко парче от нашия проект да бъде възстановено от нулата, трябва да го почистим. В нашия прост пример, единственият генериран файл е Здравейте изпълним. Без да го изтриваме ръчно, можем да го изтрием с make. Така че, можем да създадем правило за това и да назовем целта като чисти.

CC = gcc CFLAGS = -I. hellomain: хеломаин.c здравей.c $ (CC) -o здравей hellomain.c hellomain.c $ (CFLAGS) clean: rm здравей

Командата на черупката в чистата цел е само старата команда на черупката rm. Сега от командния ред изпълнете:

направи чист

Погледнете текущата директория, за да видите, че Здравейте изпълним файл е изчезнал.

Разширяване на нашия пример за решаване на повече проблеми

В нашия прост пример за компилация на hello world имаме проблем, който все още не сме решили. hellomain целта гледа здравей.° С и здравей.° С файловете с печати при следващия път, когато се опитате да го рекомпилирате с направи или направете hellomain. Така че, ако промените някой от тези два файла, те ще бъдат прекомпилирани. Но ако се промениш здравей.з тогава няма да се прекомпилира. Това е неочаквано!

Отново прескочихме междинно ниво. Не генерирахме обектните файлове и директно генерирахме изпълнимия файл. Но зад сцената обектните файлове се създават във временна директория и се изтриват. Искаме да генерираме обектните файлове, преди да изградим изпълнимия файл. Този път назоваваме основната цел като всичко

всички: hellomain.o здравей.o gcc hellomain.o здравей.o -o здравей hellomain.o: хеломаин.в здравей.h gcc -I. -c hellomain.в здравей.o: здравей.c здравей.h gcc -I. -в здравей.c почистване: rm -rf *.o rm здравей

Изпълнете командата make отново, за да видите дали вашата програма изгражда успешно или не. Стартирайте hello изпълнимия файл, за да проверите резултата. Погледнете текущата директория и ще видите, че са създадени обектни файлове. Добавихме още един ред към чистата цел, за да изчистим обектните файлове. Този скрипт на makefile ще ви помогне да прекомпилирате програмата hello world, дори ако здравей.з файлът е модифициран.

Заключение

Make е един от най-важните инструменти за потребители и програмисти на Linux. Ако сте краен потребител, познаването на make ще ви помогне да поправите много счупени неща във вашия свят на linux. Ако сте програмист, тогава просто не можете да си тръгнете, като напишете кода и позволете на потребителите си да разберат как да компилират този изходен код в изпълними файлове. Трябва да създадете скрипт на makefile за крайните потребители, така че те да не играят някаква предположителна игра, за да компилират вашия източник в изпълними файлове.

Препратки

Начална страница на проекта GNUMake
GNU Направете документация

Топ 10 игри за игра на Ubuntu
Платформата на Windows е една от доминиращите платформи за игри поради огромния процент игри, които се развиват днес, за да поддържат Windows. Може ли...
5 най-добри аркадни игри за Linux
В днешно време компютрите са сериозни машини, използвани за игри. Ако не можете да получите новия висок резултат, ще разберете какво имам предвид. В т...
Битка за Уеснот 1.13.6 Разработка освободена
Битка за Уеснот 1.13.6, издаден миналия месец, е шестата версия за разработка в 1.13.x серия и предоставя редица подобрения, най-вече на потребителски...