[Linux] инструмент для автоматизации сборки проектов - make/Makefile


1. Важность make/Makefile

  • Умеете ли вы писать makefile, с одной стороны показывает, есть ли у человека способность выполнять масштабные проекты
  • Исходные файлы в проекте не учитываются, и они размещаются в нескольких каталогах в соответствии с типом, функцией и модулем.Makefile определяет ряд правил, чтобы указать, какие файлы должны быть скомпилированы в первую очередь, какие файлы должны быть скомпилированы позже. , и какие файлы нужно перекомпилировать.Компилировать, и даже выполнять более сложные функциональные операции
  • Преимущество makefile заключается в "автоматической компиляции". После написания требуется только одна команда make, и весь проект может быть полностью автоматически скомпилирован, что значительно повышает эффективность разработки программного обеспечения.
  • make — это командный инструмент, который объясняет инструкции в make-файле.Вообще говоря, большинство IDE (интегрированных сред разработки) имеют эту команду, например: make в Delphi, nmake в Visual C++, make в GNU под Linux. Можно заметить, что make-файлы стали методом компиляции в инженерии.
  • make — это команда, makefile — это файл (по пути к текущему исходному коду), и они оба используются вместе для завершения автоматической сборки проекта.

2. Правила и использование

использовать

Давайте сначала посмотрим на простое использование make/Makefile в Linux (сначала посмотрите на прогон свиньи, а потом проанализируйте правила):

первый шаг: Сначала мы создаем файл myfile.c и пишем простой контент
вставьте сюда описание изображения
вставьте сюда описание изображения

второй шаг: Создайте Makefile и напишите содержимое, соответствующее правилам Makefile.
вставьте сюда описание изображения
вставьте сюда описание изображения

третий шаг: используйте команду make для создания исполняемой программы и используйте команду make clean для удаления исполняемой программы.
вставьте сюда описание изображения

правило

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

вставьте сюда описание изображения

1. Отношение зависимости : в этой программе исполняемый файл myfile и файл myfile.c образуют отношение зависимости, и изменение myfile.c повлияет на myfile, поэтому myfile зависит от myfile.c. Итак, первая строка означает, что генерация исполняемой программы myfile зависит от файла myfile.c.

2. Метод зависимости : Генерация исполняемой программы myfile зависит от myfile.c, и gcc myfile.c -o myfileэто метод зависимости, в котором файл myfile зависит от myfile.c.
( Примечание. Чтобы выполнить одно действие, у вас должна быть правильная зависимость + правильный метод зависимости. )

3. PHONY: Объект, модифицированный этим ключевым словом, является псевдоцелью, то есть цель всегда может быть выполнена (не нужно сравнивать старое и новое время), то есть если мы хотим сгенерировать одну и ту же исполняемую программу многократно раз мы можем использовать это ключевое слово для изменения объекта, но обычно мы этого не делаем. У каждого обязательно возникнут вопросы: "А? Что значит быть всегда казненным?"

Возьмем в качестве примера этот Makefile, а содержимое файла myfile.c останется без изменений.
вставьте сюда описание изображения
Принцип Make : этот код полностью воплощает отношение зависимости и метод зависимости: make найдет файл с именем «Makefile» или «makefile» в текущем каталоге, а затем найдет первое отношение зависимости, и генерация myfile зависит от myfile. , генерация myfile.o зависит от myfile.s, генерация myfile.s зависит от myfile.i, генерация myfile.i зависит от myfile.c, а затем содержимое gcc является их зависимыми методами. Затем очистить означает очистить.Когда мы вводим make clean в командной строке, rm -f myfile myfile.i myfile.o myfile.sэта команда будет выполнена, и эти файлы можно будет удалить напрямую. Это зависимость всего make, и make будет находить зависимости файлов слой за слоем, пока первый целевой файл не будет окончательно скомпилирован. В процессе поиска, если возникает ошибка, например, последний зависимый файл не может быть найден, то make сразу завершит работу и сообщит об ошибке, а make проигнорирует ошибку определенной команды или сбой компиляции. make заботится только о зависимостях файлов, то есть если файлов после двоеточия все равно нет после того, как я найду зависимости, то извините, работать не буду.

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

вставьте сюда описание изображения
вставьте сюда описание изображения

Этот код выполняет make в первый раз, и его можно выполнить в обычном режиме, однако, когда мы вводим make в командной строке во второй раз, он не может быть выполнен снова. Однако, как вы можете видеть на картинке выше, после того, как make clean выполняется один раз, чтобы вступить в силу, мы выполняем ее снова, и она все равно будет действовать. Такова роль .PHONY, что означает «всегда исполняемый». Если вы хотите, чтобы команда make выполнялась всегда, добавьте .PHONY в начале. Так как же gcc знает, что нам не нужно снова компилировать без добавления .PHONY?

Метод: если мы изменим исходный файл после make, мы можем снова выполнить команду make (то есть компилятор будет судить, было ли время модификации myfile.c более ранним, чем исполняемая программа myfile, если оно позже, чем myfile, это означает, что myfile Файл .c изменен, make может продолжать выполняться, генерировать новую программу и перезаписывать старую программу).

Примечание : make — это команда, makefile — это файл (по пути к текущему исходному коду), и они оба используются вместе для завершения автоматической сборки проекта. Команда make по умолчанию выполняет первый зависимый метод в Makefile. Если вы хотите запустить указанную программу, вы должны отобразить определение, такое как приведенное выше make clean.

Например, если мы изменим Makefile на следующий код и выйдем с помощью wq, а затем введем команду make в командной строке, команда rm будет выполнена первой.
вставьте сюда описание изображения
вставьте сюда описание изображения

3. Makefile компилирует несколько файлов

Как мы компилируем, когда в нашем проекте несколько исходных файлов?
вставьте сюда описание изображения

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

Причина :

  1. Если исходный файл напрямую используется для создания исполняемой программы, то при изменении файла .c нам необходимо перекомпилировать и связать все предыдущие исходные файлы для создания исполняемого файла.
  2. Если каждый исходный файл сначала генерирует свой собственный объектный файл .o, а затем исходный файл изменяется, нам нужно только перекомпилировать двоичный файл исходного файла, а затем связать все двоичные файлы. Это значительно повышает эффективность компиляции и работы программы.

Шаг 1 : Создайте файл с именем Makefile/makefile в каталоге, где находится исходный файл.
Шаг 2 : Напишите Makefile.
вставьте сюда описание изображения
Результат выполнения :
вставьте сюда описание изображения

Дополнение: Быстрый способ написать Makefile

  1. $@: указывает объектный файл в зависимости (слева от двоеточия).
  2. $^: указывает список зависимых файлов в зависимостях (справа от двоеточия).
  3. $<: указывает первый зависимый файл в зависимостях (первый справа от двоеточия).

Таким образом, приведенный выше файл также можно записать как:
вставьте сюда описание изображения

Supongo que te gusta

Origin blog.csdn.net/weixin_63449996/article/details/130018588
Recomendado
Clasificación