8-900-374-94-44
[email protected]
Slide Image
Меню

Как запустить makefile linux: Makefile: что это, как запустить makefile на Linux и на Windows

Makefile: что это, как запустить makefile на Linux и на Windows

Makefile — это файл утилиты «make», который сохраняется вместе с кодом в репозитории. Makefile помещают в корень проекта, работает он в двух направлениях:

Сам по себе файл Makefile представляет собой набор структурированных программных команд, которые запускает утилита «make». 

Makefile и утилита «make» представляют собой единый инструмент, который объединяет различные программные команды в одном месте и обеспечивает самодокументирование программы. То есть вы пишите программный код, а он самостоятельно вписывается в файл Makefile в виде уникальной структуры.

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

Make и Makefile — что это?

Makefile и утилита «make» были придуманы для того, чтобы автоматизировать сборку программ и библиотек из программного кода. Такой функционал оказался востребованным среди программистов, поэтому «эта парочка» быстро обрела популярность. Программисты смекнули, что использовать Makefile можно не только для сборки библиотек, но и в других программах. Главное, за что ценят утилиту «make», — это автоматизация сборки. На сегодняшний день использовать Makefile в большом проекте — это стандарт среди разработчиков любых уровней.

Фактически утилита «make» нужна только для того, чтобы запустить файл Makefile, а точнее, «цели», прописанные в этом файле. Шаблон Makefile выглядит таким образом:

#Makefile

Цель№1: <наименование цели>

   команда№1 #<описывается команда, которая должна выполниться>

   команда№2 #<описывается команда, которая должна выполниться>

 

Важные замечания по шаблону Makefile:

  • когда задаете имя цели, можно использовать дефис «-» и подчеркивание «_»;

  • список команд будет выполняться в порядке очередности, но каждая следующая команда активируется только в том случае, если предыдущая выполнилась без ошибок;

  • команды разделяются между собой табуляцией — это важно;

  • после того как закончилось описание одной цели, нужно оставить пустую строку, так как пустая строка отделяет одну цель от другой.

Поэтому формирование Makefile в собственном проекте — это ответственное дело. Нужно корректно разделить команды на цели и задать им понятные имена, чтобы потом было легче понять, что за цель была описана. То есть из Makefile не нужно делать «свалку кода» — нужно изначально придерживаться строгой и понятной структуры. Таким образом, Makefile будет служить для того, для чего был задуман.

Как запустить Makefile

Если Makefile уже сформирован в программе, тогда запустить его достаточно просто. Главное, чтобы утилита «make» была инсталлирована на вашем устройстве. Обычно она инсталлирована по умолчанию. 

Чтобы запустить «make» в Linux, нужно в терминале ввести команду:

     $ make

После запуска утилита «make» найдет файл Makefile и выполнит первую цель, которая в нем записана. Также при запуске можно указать цель, которую нужно активировать. Например:

     $ make <имя цели>

Если нужно, тогда можно указать несколько целей в одном Makefile, которые нужно активировать.

В Windows также можно запустить файл Makefile. Для этого нужно открыть Visual Studio и перейти в нем в каталог, который содержит файл Makefile. Потом нужно ввести команду:

nmake -f Makefile.win

 

Заключение

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

что это за файл и как его использовать в программе Make

Makefile — это файл с инструкциями для утилиты make, которая нужна для автоматической сборки проекта.

Что такое make и зачем она нужна

Во время работы над проектом создаются несколько файлов. Это набор кода, сохраненный в документе с определенным расширением. Например, для C++ код сохраняется в файлы .CPP. Чтобы набор кода стал исполняемым и превратился в файл, который можно запустить, его необходимо скомпилировать. Для этого используется специальная программа — компилятор. Она преобразует текст, написанный на языке программирования, в машинный код. Для C++ часто используют g++, бесплатный компилятор из набора gcc.

Компилятор превращает набор кода в объектные файлы, или модули. С помощью линковщика они соединяет все воедино с учетом зависимостей и связей между исходниками. Результат — готовый исполняемый файл.

Утилита make автоматизирует процесс — разработчику достаточно набрать одну команду в консоли. Она преобразует исходный код в модули, а их — в исполняемые файлы, которые можно запустить. Так создаются библиотеки и разнообразные программные продукты. Makefile показывает программе правила, по которым нужно выполнять преобразования.

Make работает на Linux и системах на базе Unix — для этих ОС утилита считается основным средством сборки программ. В Windows тоже есть концепция Makefile, но управляет этими файлами утилита nmake. У make две версии: для платформы BSD и для GNU. Первая используется в операционных системах FreeBSD, OpenBSD и NetBSD, вторая — в MacOS и Linux. Утилита обычно есть в ОС по умолчанию.

Для чего нужен Makefile

Чаще всего утилиту и файлы Makefile используют разработчики, пишущие код в операционных системах семейства Unix и Linux. Но мейкфайлы могут потребоваться и программистам, работающим под Windows. Чаще всего они применяются:

  • для выдачи инструкций программе make, которая автоматизирует работу по сборке;
  • возможности собрать программный проект и превратить его в исполняемый файл в одно касание;
  • правильной обработки зависимостей и сущностей в коде;
  • корректной компиляции, преобразования кода;
  • ускорения и упрощения программирования, в первую очередь на языках C и C++.

Что такое правила Makefile

Makefile одновременно является и инструкцией, и исполняемым файлом, который запускает утилита make. Он содержит код на специальном скриптовом языке, описывающий конечные условия — они должны выполняться при сборке проекта. Это называется правилами.

Синтаксис правил в целом такой:

цель: зависимости

          команды

Цель. Файл, который программа make должна сгенерировать после запуска. Это может быть модуль или исполняемый файл. В Makefile указываются его будущее имя и расширение. Иногда цель — не файл, а действие. Это бывает нужно, если программист использует утилиту make, чтобы сделать что-то, а не собрать проект.

Цель по умолчанию — all без зависимостей. Это означает, что утилита make при исполнении инструкции сразу перейдет к командам.

Зависимости. Это начальные условия, файлы и действия, от которых зависит цель. Их может не быть — тогда make начнет сразу выполнять команды ниже. Но если зависимости есть, утилита сначала проверит их и выполнит все связанные с ними действия. Только после этого она перейдет к цели.

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

Например, если цель А — начальное условие для цели Б, то цель Б выполнится только после цели А.

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

Что содержит Makefile

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

Явные правила. Это записи, которые описывают, как и какие файлы надо преобразовать. Это самый простой способ описать преобразования в Makefile: действия, условия и цели указываются напрямую.

Неявные правила. Также называются негласными. Это более сложный случай: в правилах не пишется напрямую, что должна сделать утилита make. В них используются переменные, а значит, особенности выполнения могут меняться.

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

В результате проект соберется с одним или другим компилятором — это будет зависеть от значения переменной на момент выполнения правила.

Определения переменных. Не правила, а строки, в которых описываются переменные. Так им присваиваются значения, которые автоматически подставятся в действия, где используются переменные.

Выглядит это так:

<название переменной> = <значение переменной>

Содержимое переменной считается строкой. Ее можно подставлять в правила следующим образом: $(<имя переменной>).

Директивы. Разнообразные конструкции, которые расширяют возможности Makefile. Например, с помощью соответствующих директив можно создать в файле условие «если — то», которое выполнит определенное действие, если истинно какое-либо выражение. Можно подключить к нему другие мейкфайлы, приостановить выполнение текущего файла и открыть другой, чтобы он отработал первым.

На этом возможности директив не ограничиваются. Конструкции нужны для создания сложных мейкфайлов.

Комментарии. Текст, который ничего не делает — только описывает происходящее. Он не влияет на выполнение мейкфайла и нужен для разработчиков. Там находится краткая документация или справка, которая рассказывает человеку, что именно происходит в тот или иной момент.

Комментарий в Makefile — это строка, которая начинается с #. Весь текст до конца строки после этого символа считается частью комментария.

Когда и как выполняется Makefile

Когда разработчик решает собрать проект или выполнить другое действие, он вызывает программу make с помощью консоли. Одноименная команда запускает мейкфайл и выполняет инструкции, которые в нем описаны, — разработчику остается только пользоваться результатом.

  • Если набрать команду make без дополнительных флагов, то утилита попытается найти мейкфайл в текущей папке и запустить его.
  • Если набрать make -f <название Makefile>, то программа начнет выполнять заранее заданный мейкфайл.

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

Как начать пользоваться make и Makefile

Для работы необходима только операционная система на базе Unix. Это любая ОС платформы BSD, MacOS или ОС семейства Linux: Debian, Ubuntu, Gentoo и другие. В эти ОС утилита make встроена по умолчанию. Можно сразу начать ей пользоваться и создавать мейкфайлы.

Если у вас Windows, необходимо или установить вторую ОС, или воспользоваться аналогом make под названием nmake. Утилита входит в состав Microsoft Visual Studio, большого набора программного обеспечения для разработчиков.

Linux: Как запустить make

Утилита Linux make работает, считывая и интерпретируя make-файл . Обычно вы запускаете make, просто вводя следующую команду в командной строке:

 сделать 

При таком запуске GNU make ищет файл с именем GNUmakefile, makefile или Makefile — именно в таком порядке. Если make находит один из этих make-файлов, он строит первую цель, указанную в этом make-файле. Однако, если make не находит подходящий make-файл, она выводит следующее сообщение об ошибке и завершает работу:

 make: *** Цели не указаны и make-файл не найден.  Останавливаться. 

Если ваш make-файл имеет имя, отличное от имен по умолчанию, вы должны использовать опцию -f, чтобы указать make-файл. Синтаксис команды make с этой опцией —

.
 make -f имя файла 

, где имя файла — имя make-файла.

Даже если у вас есть make-файл с именем по умолчанию, таким как Makefile, вы можете захотеть создать определенную цель из нескольких целей, определенных в make-файле. В этом случае вы должны использовать следующий синтаксис при запуске make:

 сделать цель 

Например, если make-файл содержит цель с именем clean, вы можете собрать эту цель с помощью этой команды:

 очистить 

Другой специальный синтаксис переопределяет значение переменной make. Например, GNU make использует переменную CFLAGS для хранения флагов, используемых при компиляции файлов C. Вы можете переопределить значение этой переменной при вызове make. Вот пример того, как вы можете определить CFLAGS как опцию -g -O2:

 сделать CFLAGS="-g -O2" 

В дополнение к этим параметрам GNU make принимает несколько других параметров командной строки. В этой таблице перечислены параметры GNU make.

Опции для GNU make
Опция Значение
Игнорирует указанную переменную, но принимает ее для совместимость с другими версиями make.
-C НАПРАВЛЕНИЕ Переходит в указанный каталог перед чтением make-файла.
Выводит отладочную информацию.
Позволяет переменным среды переопределять определения переменные с аналогичными именами в make-файле.
-f ФАЙЛ Считывает FILE как make-файл.
Отображает список производителей параметры.
-i Игнорирует все ошибки в командах, выполняемых при построении цель.
-Я ДИР Ищет в указанном каталоге включенные make-файлы. (Возможность включения файла в make-файл уникален для GNU make. )
-j ЧИСЛО Указывает количество команд make, которые могут выполняться одновременно.
Продолжает создавать несвязанные цели, даже если возникает ошибка при построении одной из целей.
-1 НАГРУЗКА Не запускает новое задание, если средняя нагрузка не ниже ЗАГРУЗИТЬ (число с плавающей запятой).
Игнорирует указанную переменную, но принимает ее для совместимость с другими версиями make.
Выводит команды для выполнения, но не выполняет их.
-o ФАЙЛ Не перестраивает файл с именем FILE , даже если он старше своих иждивенцев.
Отображает базу данных make переменные и неявные правила.
-q Ничего не запускает, но возвращает 0 (ноль), если все цели актуально, 1, если что-то нуждается в обновлении, или 2, если ошибка имеет место.
Удаляет все встроенные правила.
Удаляет все встроенные переменные и правила.
Работает тихо (без отображения команд по мере их выполнять).
Изменяет метку времени файлов.
Отображает номер версии make и уведомление об авторских правах.
Отображает имя рабочего каталога до и после обработка make-файла.
-W ФАЙЛ Предполагается, что указанный файл был изменен (используется с -n, чтобы увидеть, что произойдет, если вы измените это файл).

Эту статью можно найти в категории:

  • Linux ,

bash — как запустить makefile в Ubuntu

спросил

Изменено 7 лет, 5 месяцев назад

Просмотрено 66 тысяч раз

Есть два простых файла . c add.c и hello.c. это мой makefile-

 все: add.exe hello.exe
add.exe: add.o
    gcc -o add.exe add.o
привет.exe: привет.о
    gcc -o привет.exe привет.о
доп.о: доп.с
    gcc -c доп.с
привет.о: привет.с
    gcc -c привет.с
 

при вводе make на терминале отображаются все эти четыре команды, но когда я пытаюсь запустить это, используя ./all , он говорит

 bash: ./all: Нет такого файла или каталога.
 

./hello.exe или ./add.exe работает нормально.

, когда я набираю ./all на компьютере моего друга, он показывает правильный вывод.

  • bash
  • Ubuntu
  • makefile

3

Компьютер вашего друга делает что-то странное, и из вашего вопроса неясно, что они сделали. Ваш компьютер работает нормально.

Вызов make all Скомпилирует все, но на самом деле не сделает программу с именем all . Он компилирует только две программы: hello.exe и add.exe .

Таким образом, вызов ./all должен завершиться ошибкой, потому что он запрашивает запуск несуществующей программы с именем all .

Вполне возможно, что ваш друг написал себе программу или скрипт под названием «все». Вам нужно будет спросить своего друга, что этот скрипт/программа делает и как он это делает.

Редактировать

Чтобы увидеть, что сделал ваш друг, откройте терминал на компьютере вашего друга (такой как на скриншоте) и введите команду

 ls -lh
 

Список всех файлов в этом каталоге. Ищите один с именем «все». Это может выглядеть примерно так (со словом «все» зеленым цветом):

 -rwxr----- 1 приложение приложение 67 23 окт 15:05 все
 

Предполагая, что это там, вы можете посмотреть его содержимое, набрав

 cat ./all
 

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *