Простой Makefile
Вот простой Makefile, который описывает, как исполняемый файл, называемый edit, зависит от восьми объектных файлов, которые, в свою очередь, зависят от восьми C-исходных файлов и трёх файлов заголовков.
В этом примере все C-файлы включают defs.h, но только те, которые определяют команды редактирования, включают command.h, а только низкоуровневые файлы, изменяющие буфер редактора, включают buffer.h.
edit : main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
Мы разделили каждую длинную строку на две строки с использованием обратного слэша/новой строки; это как использование одной длинной строки, но легче читать. Смотрите Разделение длинных строк.
Чтобы использовать этот Makefile для создания исполняемого файла, называемого edit, введите:
make
Чтобы использовать этот Makefile для удаления исполняемого файла и всех объектных файлов из каталога, введите:
make clean
В примере Makefile цели включают исполняемый файл ‘edit’ и объектные файлы ‘main.o’ и ‘kbd.o’. Предшественниками являются такие файлы, как ‘main.c’ и ‘defs.h’. Фактически, каждый файл ‘.o’ является как целью, так и предшественником. Рецепты включают ‘cc -c main.c’ и ‘cc -c kbd.c’.
Когда цель является файлом, она должна быть перекомпилирована или перелинкована, если любой из её предшественников изменяется. Кроме того, любые предшественники, которые сами являются автоматически сгенерированными, должны быть обновлены в первую очередь. В этом примере edit зависит от каждого из восьми объектных файлов; объектный файл main.o зависит от исходного файла main.c и от файла заголовка defs.h.
Рецепт может следовать за каждой строкой, содержащей цель и предшественники. Эти рецепты показывают, как обновить целевой файл. Табуляция (или любой символ, указанный переменной .RECIPEPREFIX; см. Специальные переменные) должна стоять в начале каждой строки рецепта, чтобы отличать рецепты от других строк в Makefile. (Обратите внимание, что make ничего не знает о том, как работают рецепты. Вам нужно предоставить рецепты, которые правильно обновят целевой файл. Всё, что делает make, это выполняет указанный вами рецепт, когда целевой файл необходимо обновить.)
Цель ‘clean’ не является файлом, а просто именем действия. Поскольку вы обычно не хотите выполнять действия в этом правиле, ‘clean’ не является предшественником любого другого правила. В результате make никогда ничего с ним не делает, если вы его не попросите. Обратите внимание, что это правило не только не является предшественником, но также не имеет предшественников, поэтому единственная цель правила – выполнить указанный рецепт. Цели, которые не ссылаются на файлы, а являются просто действиями, называются фиктивными целями. Смотрите Фиктивные цели для получения информации об этом типе цели. Смотрите Ошибки в рецептах, чтобы узнать, как заставить make игнорировать ошибки из rm или любой другой команды.
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/Simple-Makefile.html