分类: LINUX
2009-07-29 14:18:20
二。Config.in
文件Config.in
的文件。它基本上包括:config BR2_PACKAGE_FOO
bool "foo"
help
This is a comment that explains what foo is.
最后,你必须添加新foo/Config.in
到package/Config.in
。
if !BR2_PACKAGE_BUSYBOX_HIDE_OTHERS
source "package/procps/Config.in"
endif
foo.mk
。 这将包含在 Makefile规则,负责下载,配置,编译和安装软件。#############################################################6~11行:定义一些有用的变量。
#
# foo
#
#############################################################
FOO_VERSION:=1.0
FOO_SOURCE:=foo-$(FOO_VERSION).tar.gz
FOO_SITE:=
FOO_INSTALL_STAGING = YES
FOO_INSTALL_TARGET = YES
FOO_CONF_OPT = --enable-shared
FOO_DEPENDENCIES = libglib2 host-pkgconfig
$(eval $(call AUTOTARGETS,package,foo))
,我们宣布软件包的版本。
, ,我们宣布源程序和网络上的下载位置。
,我们会告诉Buildroot安装申请分期目录。 分期目录,位于build_ARCH/staging_dir/
是目录下所有的包被安装,包括他们的文件,等等默认情况下,软件包安装在这个位置使用make install
命令。
,我们会告诉Buildroot也将应用程式安装到目标目录。该目录包含了什么将成为根文件系统上运行的目标。 通常,我们尽量不要安装文件,并安装剥夺版本的二进制。 .默认情况下,软件包安装在这个位置使用make install-strip
命令。
,我们会告诉Buildroot通过自定义的配置选项,这将被传递到在./configure
脚本之前,配置和建立。
,我们宣布,我们的依赖性,
,我们调用package/Makefile.autotools.in
把事情做完。
第二个解决办法,适合于每一种类型的包装,看起来像这样:
#############################################################
#
# foo
#
#############################################################
FOO_VERSION:=1.0
FOO_SOURCE:=foo-$(FOO_VERSION).tar.gz
FOO_SITE:=
FOO_DIR:=$(BUILD_DIR)/foo-$(FOO_VERSION)
FOO_BINARY:=foo
FOO_TARGET_BINARY:=usr/bin/foo
$(DL_DIR)/$(FOO_SOURCE):
$(call DOWNLOAD,$(FOO_SITE),$(FOO_SOURCE))
$(FOO_DIR)/.source: $(DL_DIR)/$(FOO_SOURCE)
$(ZCAT) $(DL_DIR)/$(FOO_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
touch $@
$(FOO_DIR)/.configured: $(FOO_DIR)/.source
(cd $(FOO_DIR); rm -rf config.cache; \
$(TARGET_CONFIGURE_OPTS) \
$(TARGET_CONFIGURE_ARGS) \
./configure \
--target=$(GNU_TARGET_NAME) \
--host=$(GNU_TARGET_NAME) \
--build=$(GNU_HOST_NAME) \
--prefix=/usr \
--sysconfdir=/etc \
)
touch $@
$(FOO_DIR)/$(FOO_BINARY): $(FOO_DIR)/.configured
$(MAKE) CC=$(TARGET_CC) -C $(FOO_DIR)
$(TARGET_DIR)/$(FOO_TARGET_BINARY): $(FOO_DIR)/$(FOO_BINARY)
$(MAKE) DESTDIR=$(TARGET_DIR) -C $(FOO_DIR) install-strip
rm -Rf $(TARGET_DIR)/usr/man
foo: uclibc ncurses $(TARGET_DIR)/$(FOO_TARGET_BINARY)
foo-source: $(DL_DIR)/$(FOO_SOURCE)
foo-clean:
$(MAKE) prefix=$(TARGET_DIR)/usr -C $(FOO_DIR) uninstall
-$(MAKE) -C $(FOO_DIR) clean
foo-dirclean:
rm -rf $(FOO_DIR)
#############################################################
#
# Toplevel Makefile options
#
#############################################################
ifeq ($(BR2_PACKAGE_FOO),y)
TARGETS+=foo
endif
首先,这个Makefile中示例适用于一个单一的二进制软件。对于其他软件,如多个库或更复杂的东西与多个二进制文件,它应加以调整。看看其他*.mk
中的文件package
目录。
FOO_VERSION
: foo 的版本号。FOO_SOURCE
: 源程序压缩包名称。FOO_SITE
: foo的档案下载地址。FOO_DIR
:软件将到该目录配置和编译。FOO_BINARY
:软件二进制名称。FOO_TARGET_BINARY
:二进制在目标文件系统内的完整路径。DL_DIR
)。./configure
的configure脚本。/usr/man
目录内的目标文件被删除,以节省空间。Makefile
下载,编译,然后安装这个套件。 这一目标首先应取决于所有必要的dependecies的软件(在我们的例子中, uclibc和ncurses ) ,同时也取决于最后二进制。 这最后的依赖将呼吁所有先前相依以正确的顺序。foo-source
目标是强制性的,以支持用户如果愿意脱机-建立。 此外,它简化了检查,如果所有的包来源下载。-clean
的目标应该运行
make clean
on $(BUILD_DIR)/package-version,必须卸载$(STAGING_DIR)和$(TARGET_DIR)中的所有文件。foo
名单上的目标是由Buildroot的第一次检查,