Все цели и правила их выполнения определены в двигателе. Пакет содержит лишь параметры двигателя - управляющие переменные, содержащие либо простой параметр для правила цели, либо команды, включаемые соответствующим правилом соответствующей цели.
<параметры пакета>
include $(DEFS)
<зависимости от других пакетов>
<команды правил выполнения целей>
include $(RULES)
Части двигателя, включаемые директивой include $(DEFS), содержат доопределения параметров двигателя и умолчания. Некоторые из этих определений может использовать сам пакет.
Части двигателя, включаемые директивой include $(RULES), содержат цели и правила их выполнения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | PKG_VERSION = 3.0.0
PKG_SITES = $(SF_NET_SITES)
PKG_SITE_PATH = $(PKG_BASE)
PKG_REMOTE_FILE_SUFFICES = .tar.gz
include $(DEFS)
configure : $(ST_DIR)/toolchain.install
define CONFIGURE_CMD
cd $(PKG_BLD_DIR) && ./configure -C $(LOG) \
--build=$(BUILD) --host=$(TARGET) \
--exec-prefix=$(ROOT_DIR) \
--prefix=$(INST_DIR) \
--with-gnu-ld \
$(STD_VARS)
endef
BUILD_CMD = $(BUILD_CMD_DEFAULT)
CLEAN_CMD = $(CLEAN_CMD_DEFAULT)
DISTCLEAN_CMD = $(DISTCLEAN_CMD_DEFAULT)
INSTALL_CMD = $(INSTALL_CMD_DEFAULT)
include $(RULES)
|
Пакет неявно разделён на секции. Все секции разделяются двумя пустыми строками. Внутри секции разделитель - одна пустая строка. Для особо сложных пакетов, число пустых строк-разделителей можно увеличивать.
За исключением первой секци определений и последней секции правил, остальные являются параметрами целей цепи сборки.
Содержит директиву “include $(DEFS)” и определения параметров над ней.
Пример:
1 2 3 4 5 6 | PKG_VERSION = 3.0.0
PKG_SITES = $(SF_NET_SITES)
PKG_SITE_PATH = $(PKG_BASE)
PKG_REMOTE_FILE_SUFFICES = .tar.gz
include $(DEFS)
|
Содержит зависимости и управляющие переменные цели extract. Необязательно.
Сложный пример:
extract : $(call bstamp_f,extract,buildroot)
define POST_EXTRACT_CMD
$(MKDIR_P) -v $(PKG_BLD_DIR) $(LOG)
cp -v $(_SRC_DIR)/buildroot/toolchain/sstrip/sstrip.c \
$(PKG_BLD_DIR) $(LOG)
endef
Содержит зависимости и управляющие переменные цели patch. Необязательно.
Простой пример:
PKG_PATCH_FILES = $(PKG_PKG_DIR)/*.patch
Сложный пример:
PKG_PATCH_FILES = $(PKG_PKG_DIR)/*.patch
patch : $(call bstamp_f,install,sed)
define PATCH_CMD
echo "$(i2)Integrate add-ons ..."
cd $(PKG_SRC_DIR) && \
for a in $(addon_dirs); do \
$(LNTREE) $$a `basename $$a`; done
# -lgcc_eh is absent, linking failed
echo "$(i2)Cutting off -lgcc_eh ..."
$(RELINK) $(PKG_SRC_DIR)/Makeconfig $(LOG)
$(SED) -i -e "s,-lgcc_eh,,g" $(PKG_SRC_DIR)/Makeconfig $(LOG)
endef
Содержит зависимости и управляющие переменные цели pre-configure. Необязательно.
Пример:
AC_VER = 2.65
include $(COMMON_PKG_DIR)/autoconf.mk
AM_VER = 1.11
include $(COMMON_PKG_DIR)/automake.mk
pre-configure : $(call bstamp_f,install,libtool) # libtoolize
define PRE_CONFIGURE_CMD
cd $(PKG_BLD_SUB_DIR) && $(AC_VARS) $(AM_VARS) $(ACLOCAL) $(LOG)
cd $(PKG_BLD_SUB_DIR) && $(AC_VARS) $(AM_VARS) libtoolize --force $(LOG)
#cd $(PKG_BLD_SUB_DIR) && $(AC_VARS) $(AM_VARS) $(AUTOHEADER) $(LOG)
cd $(PKG_BLD_SUB_DIR) && $(AC_VARS) $(AM_VARS) $(AUTOMAKE) -a $(LOG)
cd $(PKG_BLD_SUB_DIR) && $(AC_VARS) $(AM_VARS) $(AUTOCONF) $(LOG)
endef
Содержит зависимости и управляющие переменные цели configure. Необязательно.
Пример:
configure : $(ST_DIR)/toolchain.install
define CONFIGURE_CMD
cd $(PKG_BLD_DIR) && ./configure -C $(LOG) \
--build=$(BUILD) --host=$(TARGET) \
--exec-prefix=$(ROOT_DIR) \
--prefix=$(INST_DIR) \
--with-gnu-ld \
$(STD_VARS)
endef
Содержит зависимости и управляющие переменные цели build.
Простой пример:
BUILD_CMD_TARGET = sredird
BUILD_CMD = $(BUILD_CMD_DEFAULT)
CLEAN_CMD = $(CLEAN_CMD_DEFAULT)
DISTCLEAN_CMD = $(DISTCLEAN_CMD_DEFAULT)
Содержит зависимости и управляющие переменные цели install.
Простой пример:
INSTALL_CMD = $(INSTALL_CMD_DEFAULT)
Содержит директиву “include $(RULES)”
Пример:
include $(RULES)