Как открыть makefile linux

Русские Блоги

Подробный проект makefile под Linux

Что такое make-файл

В проекте есть бесчисленное множество исходных файлов, которые размещены в нескольких каталогах по типу, функции и модулю. Makefile определяет ряд правил, определяющих, какие файлы должны быть скомпилированы первыми, какие файлы должны быть скомпилированы позже, а какие файлы. Перекомпилируйте и даже выполняйте более сложные функциональные операции.Поскольку make-файл похож на скрипт оболочки, он также может выполнять команды операционной системы. (Источник вышеуказанного содержания и энциклопедия Baidu)
В моем понимании, make-файл — это план, подробный план плана, записанный в файле. Мы указываем, какие файлы использовать, какие файлы генерировать и какие конкретные операции использовать. Затем после получения сигнала система завершит требуемую операцию в соответствии с нашей командой

Что делает

make — это команда. Когда мы используем vim для завершения содержимого make-файла, нам нужно только создать его. Система автоматически найдет make-файл в текущем каталоге, проанализирует его содержимое и, наконец, достигнет ожидаемых результатов.

make, makefle комбинированная операция

  1. Введите команду, чтобы открыть make-файл: vim make-файл
  2. Чтобы создать имя файла целевого объекта Зависимое имя файла объекта
    (Обратите внимание, что вам нужно переключиться в режим ввода, когда вы открываете ввод vim. Подробнее см.linux vi / vim editor
  3. После новой строки: не забудьте ввести вкладку (и нажмите клавишу Tab) без пробелов.
  4. Команда компиляции, которая будет выполнена для генерации объектного файла
  5. esc Перейти в нормальный режим «: wq» Сохранить и выйти
  6. Введите команду после выхода: сделайте и завершите работу gcc

особенности makefile

  1. Одной из характеристик make является то, что она не генерирует один и тот же контент повторно. Если содержимое нашего файла обновлено, то после команды make оно не будет сгенерировано повторно, но скажите нам предложение: файл уже обновлен.
  2. make автоматически определит, есть ли какие-либо изменения в содержимом файла, если они есть, он будет перенесен с начала, в противном случае он не будет производиться.
  3. Make работает с объектами, и всегда есть только одна цель. Make завершит работу сразу после завершения генерации целевого объекта, и никаких дополнительных операций ночью не будет. Другими словами, если у нас нет умного метода, make всегда будет генерировать только объектный файл в верхней части содержимого файла.
  4. Что если мы хотим создать несколько целевых файловых объектов?
    Например:

Мы используем поддельный объект, то есть объект, который все сгенерирован без особых операций, потому что для реализации всего этого требуются test1 и test2. Система смотрит вниз и обнаруживает, что генерация test1 требует использования gcc, генерация test2 требует работы gcc, а затем генерирует Хороший test1, test2 почти в процессе генерации всего. Поскольку нет операции, наше все не будет сгенерировано.
Например: в «Путешествии на Запад» часто бывает горный призрак, которому нужно взять двух девственных мальчиков и девочек, чтобы пожертвовать отчет в этом году, поэтому в двух семьях в деревне нужно иметь двух девственных мальчиков В конце концов, хорошая погода, и мальчики, и девочки должны готовиться.

clearn

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

Читайте также:  Не загружается windows переустановка не помогает

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

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

Предопределенные переменные

псевдообъект в make-файле

1. Обратите внимание, что make-файл отличается от других файлов, компилируемых gcc / g ++, и комментарий в make-файле — «#»
2.

Источник

Makefile для самых маленьких

Не очень строгий перевод материала mrbook.org/tutorials/make Мне в свое время очень не хватило подобной методички для понимания базовых вещей о make. Думаю, будет хоть кому-нибудь интересно. Хотя эта технология и отмирает, но все равно используется в очень многих проектах. Кармы на хаб «Переводы» не хватило, как только появится возможность — добавлю и туда. Добавил в Переводы. Если есть ошибки в оформлении, то прошу указать на них. Буду исправлять.

Статья будет интересная прежде всего изучающим программирование на C/C++ в UNIX-подобных системах от самых корней, без использования IDE.

Компилировать проект ручками — занятие весьма утомительное, особенно когда исходных файлов становится больше одного, и для каждого из них надо каждый раз набивать команды компиляции и линковки. Но не все так плохо. Сейчас мы будем учиться создавать и использовать Мейкфайлы. Makefile — это набор инструкций для программы make, которая помогает собирать программный проект буквально в одно касание.

Для практики понадобится создать микроскопический проект а-ля Hello World из четырех файлов в одном каталоге:

Все скопом можно скачать отсюда
Автор использовал язык C++, знать который совсем не обязательно, и компилятор g++ из gcc. Любой другой компилятор скорее всего тоже подойдет. Файлы слегка подправлены, чтобы собирались gcc 4.7.1

Программа make

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

Процесс сборки

Компилятор берет файлы с исходным кодом и получает из них объектные файлы. Затем линковщик берет объектные файлы и получает из них исполняемый файл. Сборка = компиляция + линковка.

Компиляция руками

Самый простой способ собрать программу:
g++ main.cpp hello.cpp factorial.cpp -o hello
Каждый раз набирать такое неудобно, поэтому будем автоматизировать.

Самый простой Мейкфайл

В нем должны быть такие части:

Для нашего примера мейкфайл будет выглядеть так:

Обратите внимание, что строка с командой должна начинаться с табуляции! Сохраните это под именем Makefile-1 в каталоге с проектом и запустите сборку командой make -f Makefile-1
В первом примере цель называется all . Это цель по умолчанию для мейкфайла, которая будет выполняться, если никакая другая цель не указана явно. Также у этой цели в этом примере нет никаких зависимостей, так что make сразу приступает к выполнению нужной команды. А команда в свою очередь запускает компилятор.

Использование зависимостей

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

Читайте также:  Что составляет microsoft windows

Это надо сохранить под именем Makefile-2 все в том же каталоге

Теперь у цели all есть только зависимость, но нет команды. В этом случае make при вызове последовательно выполнит все указанные в файле зависимости этой цели.
Еще добавилась новая цель clean . Она традиционно используется для быстрой очистки всех результатов сборки проекта. Очистка запускается так: make -f Makefile-2 clean

Использование переменных и комментариев

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

Это Makefile-3
Переменные — очень удобная штука. Для их использования надо просто присвоить им значение до момента их использования. После этого можно подставлять их значение в нужное место вот таким способом: $(VAR)

Что делать дальше

После этого краткого инструктажа уже можно пробовать создавать простые мейкфайлы самостоятельно. Дальше надо читать серьезные учебники и руководства. Как финальный аккорд можно попробовать самостоятельно разобрать и осознать такой универсальный мейкфайл, который можно в два касания адаптировать под практически любой проект:

Источник

Что такое Makefile и как начать его использовать

Введение

В жизни многих разработчиков найдётся история про первый рабочий день с новым проектом. После клонирования основного репозитория проекта наступает этап, когда приходится вводить множество команд с определёнными флагами и в заданной последовательности. Без описания команд, в большинстве случаев, невозможно понять что происходит, например:

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

Со временем становится понятно, что нужен инструмент, способный объединить в себе подобные команды, предоставить к ним удобные шорткаты (более короткие и простые команды) и обеспечить самодокументацию проекта. Именно таким инструментом стал Makefile и утилита make . Этот гайд расскажет, как использование этих инструментов позволит свести процесс разворачивания проекта к нескольким коротким и понятным командам:

Что такое make и Makefile

Makefile — это файл, который хранится вместе с кодом в репозитории. Его обычно помещают в корень проекта. Он выступает и как документация, и как исполняемый код. Мейкфайл скрывает за собой детали реализации и раскладывает “по полочкам” команды, а утилита make запускает их из того мейкфайла, который находится в текущей директории.

Изначально make предназначалась для автоматизации сборки исполняемых программ и библиотек из исходного кода. Она поставлялась по умолчанию в большинство *nix дистрибутивов, что и привело к её широкому распространению и повсеместному использованию. Позже оказалось что данный инструмент удобно использовать и при разработке любых других проектов, потому что процесс в большинстве своём сводится к тем же задачам — автоматизация и сборка приложений.

Применение мейка в проектах стало стандартом для многих разработчиков, включая крупные проекты. Примеры мейкфайла можно найти у таких проектов, как Kubernetes, Babel, Ansible и, конечно же, повсеместно на Хекслете.

Синтаксис Makefile

make запускает цели из Makefile, которые состоят из команд:

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

Читайте также:  Vs code linux через консоль

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

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

Задачи будут выполняться только в указанной последовательности и только в случае успеха предыдущей задачи. Значит, можно добавить цель setup , чтобы объединить в себе все необходимые действия:

Теперь развернуть и запустить проект достаточно двумя командами:

Благодаря проделанной работе Makefile, команды проекта вместе с флагами сведены в Makefile. Он обеспечивает правильный порядок выполнения и не важно, какие при этом задействованы языки и технологии.

Продвинутое использование

Фальшивая цель

Использование make в проекте однажды может привести к появлению ошибки make: is up to date. , хотя всё написано правильно. Зачастую, её появление связано с наличием каталога или файла, совпадающего с именем цели. Например:

Как уже говорилось ранее, изначально make предназначалась для сборок из исходного кода. Поэтому она ищет каталог или файл с указанным именем, и пытается собрать из него проект. Чтобы изменить это поведение, необходимо в конце мейкфайла добавить .PHONY указатель на цель:

Последовательный запуск команд и игнорирование ошибок

Запуск команд можно производить по одной: make setup , make start , make test или указывать цепочкой через пробел: make setup start test . Последний способ работает как зависимость между задачами, но без описания её в мейкфайле. Сложности могут возникнуть, если одна из команд возвращает ошибку, которую нужно игнорировать. В примерах ранее такой командой было создание .env-файла при разворачивании проекта:

Самый простой (но не единственный) способ «заглушить» ошибку — это сделать логическое ИЛИ прямо в мейкфайле:

Добавлять такие хаки стоит с осторожностью, чтобы не «выстрелить себе в ногу» в более сложных случаях.

Переменные

Зачастую в команды подставляют параметры для конфигурации, указания путей, переменные окружения и make тоже позволяет этим управлять. Переменные можно прописать прямо в команде внутри мейкфайла и передавать их при вызове:

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

Некоторые переменные в Makefile имеют названия отличные от системных. Например, $PWD называется $CURDIR в мейкфайле:

Заключение

В рамках данного гайда было рассказано об основных возможностях Makefile и утилиты make . Более плотное знакомство с данным инструментом откроет множество других его полезных возможностей: условия, циклы, подключение файлов. В компаниях, где имеется множество проектов, написанных разными командами в разное время, мейкфайл станет отличным подспорьем в стандартизации типовых команд: setup start test deploy . .

Возможность описывать в мейкфале последовательно многострочные команды позволяет использовать его как «универсальный клей» между менеджерами языков и другими утилитами. Широкая распространённость этого инструмента и общая простота позволяют внедрить его в свой проект достаточно легко, без необходимости доработок. Но мейкфайл может быть по-настоящему большим и сложным, это можно увидеть на примере реальных проектов:

Дополнительные материалы

  • Руководство по современному Make — «выжимка» из документации на русском языке;
  • Утилита make: полезный универсальный инструмент программиста — видео-версия данного гайда.

Мейкфайлы, использованные при составлении гайда:

Источник

Оцените статью