В предишната история говорих за това как една програма работи на компютър. Споменах makefiles. В тази история ще разгледаме makefiles.

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

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

Makefiles имат собствен синтаксис, подобен на други софтуерни езици. Но с цел предоставяне на необходимите указания за компилация. Make не изпълнява пълния makefile, нито изпълнява всеки ред отгоре надолу. Той обаче има много сходни характеристики с програмирането на C, с което имате опит. Makefiles могат да имат коментари и те започват с цифра. Напишете толкова коментари, колкото желаете и документирайте какво прави вашия makefile в горната част.

Можете да включите други make-файлове с командата include и включените файлове могат да съдържат всички същите характеристики.

Ако вашите редове станат твърде дълги, можете да използвате обратната наклонена черта, за да направите вашия makefile по-четлив, това е продължение на реда. Можете да създадете променливи, за да направите вашия makefile по-четлив и преносим, ​​като използвате повторно същите имена на променливи, вместо да въвеждате отново цялото съдържание. Можете да дефинирате много правила с много рецепти за команди. Всяка команда в рецептата трябва да започва с разделител. И накрая, целите могат да се използват от други правила. Има по-разширени функции на make, които ще разгледаме. Но с този малък набор от конвенции можем да автоматизираме силно нашия процес на изграждане, така че да е лесен за използване и да предоставя последователни резултати. Променливите са много важни за нашата употреба при писане на make-файлове, тъй като ни позволяват да премахнем много дублиран код. Има различни типове променливи и различни начини за получаване на данни, присвоени към тях, както е показано тук:

Два типа, които ще използваме, са рекурсивно разширени променливи и просто разширени променливи.

Като се има предвид как компилирахме с много флагове, често използвани повторно и идентични за всеки отделен файл, който компилирахме, бихме могли да заменим целия този написан код тук с променлива.

Тук сме дефинирали променлива, наречена CFLAGS, и тя ще съдържа нашите редовно появяващи се флагове за компилиране за GCC. За всяка цел, за която трябва да компилираме обектен файл, можем просто да изброим CFLAG променливите в командите за рецепта.

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

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

GNU make и make файловете са само една опция за инструменти за генериране на компилации. Както беше посочено по-горе, софтуерният инженер трябва да е запознат със системата за изграждане. Тъй като това е още един инструмент, който можем да използваме за изграждане на устойчивост, гъвкавост и последователност в софтуерен проект и екип от инженери. Използването на GNU make има както положителни, така и отрицателни страни. Но неговата популярност, простота и безплатна цена го правят чудесно приложение за използване.

Ще се видим скоро за друга история! Забавлявайте се ☺️