Инфраструктура портов FreeBSD поддерживает параллельное
построение с использованием множественных подпроцессов
make, что позволяет системам
SMP задействовать всю доступную мощность
CPU, тем самым делая построение портов более
быстрым и эффективным.
Это достигается путем передачи флага -jX
команде make(1). К сожалению, не все порты поддерживают
параллельную сборку достаточно хорошо. Поэтому требуется включать
этот механизм явным образом путем добавления строки
MAKE_JOBS_SAFE=yes в Makefile
где-нибудь после раздела с объявлениями зависимостей.
Другой опцией управления этим механизмом с точки зрения
сопровождающего является MAKE_JOBS_UNSAFE=yes.
Эта переменная используется в случае, когда известно, что порт
ломается с -jX, и пользователь форсирует
использование многопроцессорной компиляции для всех портов с
переменной FORCE_MAKE_JOBS=yes в
/etc/make.conf.
Если ваш порт использует GNU make,
то установите USES= gmake.
| Переменная | Значение |
|---|---|
USES= gmake | Для сборки порта требуется
gmake. |
GMAKE | Полный путь к команде gmake, если
отсутствует в PATH. |
Если ваш порт является приложением X, которое создает файлы
Makefile из Imakefile,
используя imake, то установите
USES= imake. Это заставит стадию
конфигурирования автоматически выполнить xmkmf -a.
Если флаг -a представляет для вашего порта
проблему, то установите XMKMF=xmkmf. Если
порт использует imake, но не понимает
цель install.man, то следует установить
NO_INSTALL_MANPAGES=yes.
Если исходный Makefile вашего порта
имеет что-нибудь помимо all в качестве
основной цели построения, то задайте соответствующее значение
ALL_TARGET. То же касается
install и
INSTALL_TARGET.
Если ваш порт использует сценарий configure
для получения файлов Makefile из файлов
Makefile.in, то установите
GNU_CONFIGURE=yes. Если вы хотите дать
дополнительные параметры сценарию configure
(аргументом по умолчанию является --prefix=${PREFIX}
--infodir=${PREFIX}/${INFO_PATH}
--mandir=${MANPREFIX}/man
--build=${CONFIGURE_TARGET}), установите эти параметры
в CONFIGURE_ARGS. Дополнительные переменные
окружения можно передать, используя переменную
CONFIGURE_ENV.
configure| Переменная | Значение |
|---|---|
GNU_CONFIGURE | Порт использует сценарий configure
для подготовки построения. |
HAS_CONFIGURE | То же, что и GNU_CONFIGURE, кроме
того, что цель configure по умолчанию не добавляется в
CONFIGURE_ARGS. |
CONFIGURE_ARGS | Дополнительные параметры, передаваемые сценарию
configure. |
CONFIGURE_ENV | Дополнительные переменные окружения, задаваемые для
запуска сценария configure. |
CONFIGURE_TARGET | Переопределить цель configure по умолчанию. Значением
по умолчанию является
${MACHINE_ARCH}-portbld-freebsd${OSREL}. |
Если ваш порт использует CMake,
определите USES= cmake или
USES= cmake:outsource для построения
во внешнем каталоге (см. ниже).
cmake| Переменная | Значение |
|---|---|
CMAKE_ARGS | Специфичные для порта флаги
CMake, передаваемые
cmake. |
CMAKE_BUILD_TYPE | Тип построения (предопределённые профили
построения CMake). По
умолчанию Release,
Debug при использовании
WITH_DEBUG. |
CMAKE_ENV | Переменные окружения для передачи
cmake. По умолчанию
${CONFIGURE_ENV}. |
CMAKE_SOURCE_PATH | Путь к каталогу с исходным кодом. По умолчанию
${WRKSRC}. |
CMake поддерживает следующие
профили построения: Debug,
Release,
RelWithDebInfo и
MinSizeRel. Профили
Debug и Release
учитывают системные флаги *FLAGS;
RelWithDebInfo и
MinSizeRel соответственно определяют
CFLAGS со значением
-O2 -g и -Os -DNDEBUG.
Значение CMAKE_BUILD_TYPE экспортируется
в нижнем регистре в PLIST_SUB и должно
использоваться, если порт устанавливает файлы
*.cmake в зависимости от типа построения
(для примера посмотрите на deskutils/strigi). Следует
учитывать, что некоторые проекты могут определять собственные
профили построения и/или форсировать конкретный тип построения
через установку CMAKE_BUILD_TYPE в файлах
CMakeLists.txt . Для того чтобы порт
для такого проекта учитывал CFLAGS и
WITH_DEBUG, из этих файлов должны быть
удалены значения CMAKE_BUILD_TYPE.
Большинство проектов, основанных на
CMake, поддерживают метод внешнего
(out-of-source) построения. Для порта внешнее построение
можно запросить с использованием суффикса
:outsource. В этом случае
CONFIGURE_WRKSRC,
BUILD_WRKSRC и
INSTALL_WRKSRC будут иметь значение
${WRKDIR}/.build для каталога,
содержащего файлы, получаемые на этапах конфигурации и
построения; при этом каталог с исходным кодом будет
оставаться без изменений.
USES= cmakeСледующий отрывок демонстрирует использование
CMake для порта.
CMAKE_SOURCE_PATH обычно не требуется,
но может быть установлен, когда исходный код не находится
в верхнем каталоге или если порт используется для
построения части проекта.
USES= cmake:outsource
CMAKE_SOURCE_PATH= ${WRKSRC}/subprojectЕсли ваш порт использует SCons,
определите USE_SCONS=yes.
scons| Переменная | Значение |
|---|---|
SCONS_ARGS | Специфичные для порта флаги SCons, передаваемые окружению SCons. |
SCONS_BUILDENV | Переменные для установки в системном окружении. |
SCONS_ENV | Переменные для установки в окружении SCons. |
SCONS_TARGET | Последний параметр для передачи SCons, похожий на
MAKE_TARGET. |
Для того, чтобы сторонний SConstruct
соответствовал всему, что передается SCons в переменной
SCONS_ENV (самое главное, это
CC/CXX/CFLAGS/CXXFLAGS), примените патч к
SConstruct, так чтобы переменная построения
Environment выглядела следующим образом:
env = Environment(**ARGUMENTS)
В дальнейшем ее можно изменить при помощи
env.Append и env.Replace.
Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.