Учебник по Проекту Документирования FreeBSD для новых участников | ||
---|---|---|
Пред. | Глава 7. Процесс построения документации | След. |
Лучше всего это описывается при обсуждении кода. Вот системные включаемые файлы:
doc.project.mk является главным включаемым файлом проекта, который включает все остальные включаемые файлы, по мере необходимости.
doc.subdir.mk обрабатывает прохождение по дереву документов в процессе построения и установки.
doc.install.mk содержит переменные, которые отражаются на правах доступа и установке документов.
doc.docbook.mk включается, если значением переменной DOCFORMAT является docbook и установлена переменная DOC.
Рассмотрим пример:
DOCFORMAT?= docbook MAINTAINER?= doc@FreeBSD.org PREFIX?= /usr/local PRI_LANG?= en_US.ISO8859-1 .if defined(DOC) .if ${DOCFORMAT} == "docbook" .include "doc.docbook.mk" .endif .endif .include "doc.subdir.mk" .include "doc.install.mk"
Переменным DOCFORMAT и MAINTAINER заданы значения по умолчанию, если они не установлены в make-файле документа.
PREFIX является каталогом, под которым установлены инструменты для построения документации. При обычной установке портов и пакаджей это /usr/local.
PRI_LANG должна быть установлена в значение, соответствующее языку и кодировке, являющейся естественной для тех пользователей, кому предназначена документация. По умолчанию это US English.
Замечание: PRI_LANG не влияет на то, какие документы могут или будут строиться. Ее основное назначение - создание ссылок на часто упоминаемые документы в корне установки документации FreeBSD.
Строка .if defined(DOC) является примером make-условия, которое, как и в других программах, определяет дальнейшие действия, если какое-то условие выполняется или нет. defined является функцией, которая возвращает информацию о том, определена данная переменная или нет.
Затем .if ${DOCFORMAT} == "docbook" проверяет, является ли значением переменной DOCFORMAT "docbook", и в этом случае включается файл doc.docbook.mk.
Две строки .endif закрывают два вышестоящих условия, отмечая конец их действия.
Этот файл слишком долго описывать на примерах, вы сможете разобраться с ним сами на основе знаний, полученных из предыдущих глав и некоторой вспомогательной информации, дающейся здесь.
SUBDIR представляет из себя список подкаталогов, которые должны быть охвачены процессом построения.
ROOT_SYMLINKS является именами каталогов, которые должны указывать на корень установки документа от их действительных положений, если текущий язык является основным (что задается переменной PRI_LANG).
COMPAT_SYMLINK описано в разделе о make-файле подкаталога.
Зависимости описываются парами target: dependency1 dependency2 ..., и когда вам нужно построить target, вам необходимо сначала построить список зависимостей.
После описательной пары могут следовать инструкции о том, как построить цель, если процесс преобразования цели к зависимостям ранее не был определен, или если это конкретное преобразование не совпадает с применяемым по умолчанию методом.
Особая зависимость .USE задает эквивалент макроса.
_SUBDIRUSE: .USE .for entry in ${SUBDIR} @${ECHO} "===> ${DIRPRFX}${entry}" @(cd ${.CURDIR}/${entry} && \ ${MAKE} ${.TARGET:S/realpackage/package/:S/realinstall/install/} DIRPRFX=${DIRPRFX}${entry}/ ) .endfor
В вышеприведенном фрагменте _SUBDIRUSE теперь является макросом, который будет выполнять заданные команды, если задан в списке зависимостей.
Что отличает этот макрос от других целей? В основном то, что он выполняется после инструкций, данных в процедуре построения, в качестве зависимости для которой он перечислен, и это не влияет на .TARGET, которая является переменной, содержащей название текущей выполняемой цели.
clean: _SUBDIRUSE rm -f ${CLEANFILES}
В вышеприведенном фрагменте clean будет использовать макрос _SUBDIRUSE после того, как выполнит инструкцию rm -f ${CLEANFILES}. В результате это приведет к тому, что clean будет углубляться по дереву каталогов, удаляя файлы после перехода ниже, а не на пути назад.
Цели install и package обе переходят вниз по дереву каталогов, вызывая собственные выполняющие реальную работу версии в подкаталогах. (realinstall и realpackage соответственно)
clean удаляет файлы, созданные в процессе построения (и тоже переходит вниз по дереву каталогов). cleandir делает то же самое и также удаляет каталог, если он есть.
exists является еще одной функцией условия, которая возвращает истину, если указанный файл существует.
empty возвращает истину, если данная переменная имеет пустое значение.
target возвращает истину, если указанная цель еще не существует.
.for дает способ повторить набор инструкций для каждого элемента списка, заданного в переменной через пробел. Он делает это, присваивая переменной значение текущего элемента перебираемого списка.
_SUBDIRUSE: .USE .for entry in ${SUBDIR} @${ECHO} "===> ${DIRPRFX}${entry}" @(cd ${.CURDIR}/${entry} && \ ${MAKE} ${.TARGET:S/realpackage/package/:S/realinstall/install/} DIRPRFX=${DIRPRFX}${entry}/ ) .endfor
В примере выше если переменная SUBDIR пуста, то не предпринимается никаких действий; если она состоит из одного или более элементов, то инструкции между .for и .endfor будут повторены для каждого элемента, причем entry будет заменена значением текущего элемента.
Пред. | Начало | След. |
Понимание make-файлов в дереве документации | Уровень выше | Web-сервер |
Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.