| |
Традиционные реализации make поддерживают так называемую ``суффиксную'' форму записи шаблонных правил:
.<расширение_файлов_зависимостей>.<расширение_файлов_целей>: <команда_1> <команда_2> ... <команда_n>
Например, следующее правило говорит о том, что все файлы с расширением "o" зависят от соответствующих файлов с расширением "cpp":
.cpp.o: gcc -c $^
Обратите внимание на использование автоматической переменной $^
для
передачи компилятору имени файла-зависимости. Поскольку шаблонное правило может
применяться к разным файлам, использование автоматических переменных - это
единственный способ узнать для каких файлов сейчас задействуется правило.
Шаблонные правила позволяют упростить make-файл и сделать его более универсальным.
В самом первом примере все правила компиляции для получения файлов типа .o имеют одинаковую форму. Очень неудобно повторять их снова и снова; это может привести к ошибке при написании make-файла. Поэтому gmake можно указать - для известных стандартных случаев - действия и имена файлов по умолчанию для создания различных типов файлов. Для наших целей наиболее важным является то, что gmake известно, как создать файл F.o из исходного файла F.cc, и известен тот факт, что файл F.o зависит от файла F.cc. gmake автоматически использует правило
F.o : F.ccкоторое вызывается, чтобы создать F.o, если существует файл C++ с именем F.cc, но не определяет точные действия для создания F.o. Использование префикса ``CXX'' является следствия соглашения об именах для переменных, связанных с C++. Также создается команда
$(CXX) -c -Wall $(CXXFLAGS) F.cc
F : F.oчтобы сообщить о том, как создать исполняемый файл F из F.o.
$(CC) $(LDFLAGS) F.o $(LOADLIBES) -o F
В результате предыдущий пример можно переписать следующим образом.
# Makefile for simple editorSRCS = edit.cc kbd.cc commands.cc display.cc
insert.cc search.cc files.cc utils.ccOBJS = $(SRCS:.cc=.o)
CC = gcc
CXX = gcc
CXXFLAGS = -g
LOADLIBES = -lg++edit : $(OBJS)
edit.o : defs.h
kbd.o : defs.h command.h
commands.o : defs.h command.h
display.o : defs.h buffer.h
insert.o : defs.h buffer.h
search.o : defs.h buffer.h
files.o : defs.h buffer.h command.h
utils.o : defs.h
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |