GNU Make

Учебное пособие по GNU Make

Учебное пособие по GNU Make

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

Зачем делать?

Установка Make

Для создания программ недостаточно сделать только одно. Для сборки программ из исходных текстов в вашей системе должны быть установлены компиляторы и другие инструменты. Итак, нам нужен полный набор инструментов разработки для нашей цели.

Для компиляции исходных кодов в Linux существует пакет, называемый «build-essential» в системах на основе Debian (e.грамм. Ubuntu, Linux Mint и т. Д.) И «Инструменты разработки» в Red Hat и CentOS.

Чтобы установить это в системах на базе Debian:

apt-get install build-essential

Чтобы установить это в CentOS и Red Hat, запустите:

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

Начало работы с Makefile

Начнем с написания Привет мир программа на языке программирования C.

Основная функция нашей программы на C будет находиться внутри адский домен.c. Содержимое файла должно выглядеть следующим образом:

#включать  int main () my_fun (); возврат 0;  

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

void my_fun ();

Определение my_fun () живет внутри hellofun.c:

#включать  #включать  void my_fun () printf ("Привет, мир!\ n "); return;

Это очень простая программа, и мы могли бы скомпилировать ее с помощью gcc с помощью всего одной строки команды. Но программы в реальной жизни не такие простые и маленькие, как эта. Очень скоро все усложняется.  Ниже я собираюсь написать необходимый скрипт make-файла для компиляции этой программы hello world. Я объясню различные его части в следующих разделах.

адский домен: адский домен.c hellofun.c gcc -o привет, адский домен.адский домен.c -I.

Сохраните этот код в файле с именем makefile (без расширения файла). Поместите файл в каталог, где находятся файлы C. Укажите свою командную строку в этом каталоге. В командной строке напишите make и нажмите Enter. В текущем каталоге будет создан исполняемый файл с именем hello. Вы можете проверить результат, запустив исполняемый файл с помощью следующей команды.

./Привет

Выходы:

Привет мир!

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

Сценарий make-файла - это набор правил. Правила инструктируют Make, как создать цель или вывод из исходных или других файлов. Правило также определяет зависимости цели. Сначала должны выполняться правила зависимости, в зависимости от того, обработано ли это уже при просмотре меток времени. В нашем примере makefile выше, у нас есть правило с целью с именем адский домен и его зависимости. Целевое имя отделяется двоеточием от списка зависимостей. Команды оболочки, которые будут выполняться, перечислены в следующей строке. Команды оболочки должны начинаться с символа табуляции.

Если вы не укажете параметр с командой make, будет выполнена первая цель. В нашем примере мы не указали никаких параметров, и у нас было адский домен как первая и единственная цель.

Переменные

Переменные - отличный способ записать значение один раз и использовать их много раз, не повторяя значение снова и снова. Это помогает нам сохранять наш код СУХИМ (Не повторяйтесь). Если вам когда-либо понадобится изменить какое-то значение во всем скрипте, вам просто нужно изменить это в одном месте, чтобы отразить изменение повсюду, если вы используете переменную.

В нашем примере мы использовали gcc в качестве компилятора, но нам может потребоваться изменить компилятор на что-то другое. Итак, мы можем сохранить имя компилятора в переменной. Кроме того, мы можем сохранить флаги компилятора в другой переменной, чтобы повторно использовать это. Для установки значения переменной мы используем знак равенства (=), а для чтения этой переменной мы используем $ (variable_name).

CC = gcc CFLAGS = -I. адский домен: адский домен.c hellofun.c $ (CC) -o привет адский домен.адский домен.c $ (CFLAGS)

Очистка окружающей среды

Нам часто может потребоваться очистить окружающую среду. Если мы хотим, чтобы каждый элемент нашего проекта был перестроен с нуля, нам нужно его очистить. В нашем простом примере создается только файл Привет исполняемый файл. Не удаляя это вручную, мы можем удалить это с помощью make. Итак, мы можем создать для этого правило и назвать цель как чистый.

CC = gcc CFLAGS = -I. адский домен: адский домен.c hellofun.c $ (CC) -o привет адский домен.адский домен.c $ (CFLAGS) clean: rm привет

Команда оболочки в чистой цели - это просто старая команда оболочки rm. Теперь из командной строки выполните:

очистить

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

Расширение нашего примера для решения большего количества проблем

В нашем простом примере компиляции hello world у нас есть проблема, которую мы еще не решили. адский домен цель смотрит на адский.c а также чертовски весело.c отметки времени файлов в следующий раз, когда вы попытаетесь перекомпилировать его с помощью делать или же сделать адский домен. Итак, если вы измените любой из этих двух файлов, они будут перекомпилированы. Но если вы измените чертовски весело.час тогда он не будет перекомпилировать. Это неожиданно!

Опять же, мы пропустили промежуточный уровень. Мы не генерировали объектные файлы, а напрямую генерировали исполняемый файл. Но за кулисами объектные файлы создаются во временном каталоге и удаляются. Мы хотим сгенерировать объектные файлы перед сборкой исполняемого файла. На этот раз мы называем основную цель как все

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

Запустите команду make еще раз, чтобы узнать, успешно ли собирается ваша программа. Запустите исполняемый файл hello, чтобы проверить результат. Посмотрите на текущий каталог, и вы увидите, что файлы объектов созданы. Мы добавили еще одну строку в чистую цель для очистки объектных файлов. Этот сценарий make-файла поможет перекомпилировать программу hello world, даже если чертовски весело.час файл изменен.

Заключение

Make - один из самых важных инструментов для пользователей Linux и программистов. Если вы конечный пользователь, то знание make поможет вам исправить многие неработающие вещи в вашем мире Linux. Если вы программист, вы просто не можете уйти, написав код, и позволить своим пользователям выяснить, как скомпилировать этот исходный код в исполняемые файлы. Вы должны создать сценарий make-файла для конечных пользователей, чтобы они не играли в какую-то игру наугад, чтобы скомпилировать ваш исходный код в исполняемые файлы.

Рекомендации

Домашняя страница проекта GNUMake
Документация GNU Make

10 лучших игр для Ubuntu
Платформа Windows была одной из доминирующих платформ для игр из-за огромного процента игр, которые разрабатываются сегодня с встроенной поддержкой Wi...
5 лучших аркад для Linux
В настоящее время компьютеры - это серьезные машины, используемые для игр. Если вы не можете получить новый рекорд, вы поймете, о чем я. В этом посте ...
Битва за Веснот 1.13.6 Выпущена разработка
Битва за Веснот 1.13.6, выпущенная в прошлом месяце, является шестой разработкой в ​​1.13.x и содержит ряд улучшений, в первую очередь пользовательско...