Spec-Zone.ru › GNU Make

Как создать процессы в Makefile

По умолчанию, make начинает с первой цели (кроме целей, имена которых начинаются с ‘.’, если они также не содержат одну или несколько ‘/’). Это называется целью по умолчанию. (Цели — это те цели, которые make в конечном итоге стремится обновить. Вы можете изменить это поведение, используя командную строку (см. Аргументы для указания целей) или с помощью специальной переменной .DEFAULT_GOAL (см. Другие специальные переменные).

В простом примере предыдущего раздела целью по умолчанию является обновление исполняемой программы edit; поэтому мы помещаем это правило первым.

Таким образом, когда вы даете команду:

make

make считывает makefile в текущем каталоге и начинает обработку первого правила. В примере это правило предназначено для пересборки edit; но прежде чем make сможет полностью обработать это правило, он должен обработать правила для файлов, от которых зависит edit, в данном случае это объектные файлы. Каждый из этих файлов обрабатывается в соответствии со своим собственным правилом. Эти правила указывают на обновление каждого файла ‘.o’ путем компиляции его исходного файла. Перекомпиляция должна быть выполнена, если исходный файл или любой из заголовочных файлов, указанных в качестве предшественников, является более новым, чем объектный файл, или если объектный файл не существует.

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

Прежде чем перекомпилировать объектный файл, make рассматривает обновление его предшественников, исходного файла и заголовочных файлов. В данном makefile не указано, что с ними делать — файлы ‘.c’ и ‘.h’ не являются целями каких-либо правил — поэтому make ничего не делает с этими файлами. Но make автоматически обновил бы сгенерированные C-программы, такие как те, которые созданы Bison или Yacc, по своим правилам в этот момент.

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

Таким образом, если мы изменим файл insert.c и запустим make, make скомпилирует этот файл для обновления insert.o, а затем выполнит связывание edit. Если мы изменим файл command.h и запустим make, make перекомпилирует объектные файлы kbd.o, command.o и files.o, а затем свяжет файл edit.

Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/make/manual/html_node/How-Make-Works.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API