The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Каталог документации / Раздел "Программирование в Linux" / Оглавление документа
next up previous contents
Next: Специальные действия Up: Средство управления проектом make Previous: Переменные в make-файлах   Contents

Шаблонные правила

Шаблонные правила (implicit rules или pattern rules) могут быть применены к целой группе файлов. В этом их отличие от обычных правил - описывающих отношения между конкретными файлами.

Традиционные реализации make поддерживают так называемую ``суффиксную'' форму записи шаблонных правил:

.<расширение_файлов_зависимостей>.<расширение_файлов_целей>:
    <команда_1>
    <команда_2>
    ...
    <команда_n>

Например, следующее правило гласит, что все файлы с расширением "o" зависят от соответствующих файлов с расширением "cpp":

.cpp.o:
        gcc -c $^

Обратите внимание на использование автоматической переменной $^ для передачи компилятору имени файла-зависимости. Поскольку шаблонное правило может применяться к разным файлам, использование автоматических переменных - единственный способ узнать, для каких файлов сейчас задействуется правило.

Шаблонные правила позволяют упростить make-файл и сделать его более универсальным.

В самом первом примере все правила компиляции для получения файлов типа .o имеют одинаковую форму. Очень неудобно повторять их снова и снова; это может привести к ошибке при написании make-файла. Поэтому gmake можно указать - для известных стандартных случаев - действия и имена файлов по умолчанию для создания различных типов файлов. Для наших целей наиболее важным является то, что gmake известно, как создать файл F.o из исходного файла F.cc. В данном случае gmake автоматически использует правило


F.o : F.cc

$(CXX) -c -Wall $(CXXFLAGS) F.cc,
которое вызывается, чтобы создать F.o, если существует файл C++ с именем F.cc, но не определяет точные действия для создания F.o. Использование префикса ``CXX'' является следствием соглашения об именах для переменных, связанных с C++. Также создается команда

F : F.o

$(CC) $(LDFLAGS) F.o $(LOADLIBES) -o F,
чтобы сообщить, как создать исполняемый файл F из F.o.

В результате предыдущий пример можно переписать следующим образом:


 Makefile for simple editor

SRCS = edit.cc kbd.cc commands.cc display.cc $\backslash$
insert.cc search.cc files.cc utils.cc

OBJS = $(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



2004-06-22

АКЦИЯ! ПОДПИШИСЬ на журнал Linux Format до 31 января 2012 года и выиграй СУПЕРПРИЗ!

Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

Каждый, кто оформит подписку, получает бонус- объёмные наклейки на системный блок и подарки: с одним из первых выпусков журнала в 2012 году- диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

Подробнее о проведении акции вы можете прочитать на странице сайта.


  Закладки на сайте
  Проследить за страницей
Created 1996-2012 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
RUNNet TopList