Makefiles выглядят так:
all: mybinary
mybinary: files.o it.o depends.o on.o
[tab]$(CC) $(CFLAGS) files.o it.o depends.o on.o -o mybinary
files.o: files.c files.h
[tab]$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
...
Это означает, что если вы наберете make all
(сокращение просто наберет make
), то убедитесь, что mybinary target или file обновлены. Для этого необходимо убедиться, что mybinary новее, чем все файлы.o it.o зависит.o и on.o. Если нет, то он использует команды оболочки, указанные в следующей строке, для сборки mybinary. Но прежде чем сделать это, он сначала проверяет актуальность файлов .o и т. Д. Это означает, что они должны быть новее, чем files.c и files.h. Если нет, то он использует команды оболочки, указанные в следующей строке, для создания файлов .o. Как только все файлы * .o обновлены, он может создать mybinary. Как только mybinary будет создан, все цели будут выполнены.
Обычно цели - это просто файлы. Формат блока:
target: list of dependency files
[tab]shell commands to build target if it's older than any of its dependencies
[tab]more shell commands
[tab]still more
Цели также могут быть указаны с использованием подстановочных знаков, например, %.c
означает, что в оболочке вы бы назвали *.c
.
Некоторые цели являются «фальшивыми», то есть они не соответствуют ни одному реальному файлу. Цель "все" такого рода. То же самое относится и к «чистой» цели (make clean
). И так далее. Вам не нужно или не нужно создавать файл с именем «all» или «clean». Существуют различные способы указать, что цель является фальшивой.
Первая цель, которая появится в Makefile, будет вызвана, если вы просто наберете make
. Одно соглашение состоит в том, чтобы назвать эту цель "все". Тогда make
будет таким же, как make all
.