如何 运行 buildroot 包中的外部构建脚本
How to run external build script in buildroot package
在 buildroot 中,我创建了一个从 github 获取工具的包。然而,这个工具是使用 buildroot 构建的,而不是从 buildroot 中构建的,所以关于如何使用 buildroot 构建它的典型流程是这样的:
cd github/tool
export BUILDROOT_TOPDIR=$HOME/buildroot
source tool_setup.sh
tool_install_dependencies #Fetches more github dependencies based on git tags defined inside the setenv.sh, and builds them using buildroot
tool_build #Builds the tool and links dependencies
然而,在包文件中这样做是行不通的,因为来自 tool_setup.sh 的别名和 git 标签不是来源,示例包
TOOL_VERSION_VERSION = main
TOOL_VERSION_SITE = git@github.com:tool.git
TOOL_VERSION_SITE_METHOD = git
TOOL_VERSION_INSTALL_TARGET = YES
define TOOL_VERSION_BUILD_CMDS
cd github/tool
export BUILDROOT_TOPDIR=$(PWD)
source tool_setup.sh
tool_install_dependencies
tool_build
endef
define TOOL_VERSION_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 $(@D)/output/tool $(TARGET_DIR)/sbin/
endef
$(eval $(generic-package))
将因 /bin/bash: tool_install_dependencies: command not found
而失败,使用 cmake-package 将失败,因为 CMakelists.txt 无法找到包含依赖项的 git 标签的变量。
我认为您的理解有误。我宁愿建议看看 tool_install_dependencies 和 tool_build 在你的 tools_setup.sh 脚本中做了什么,并在 Buildroot 包中复制它。
根据其名称,tool_install_dependencies 特别可怕,因为您绝对不希望 Buildroot 包自行安装依赖项。
除此之外,直接回答您的问题:与所有 Makefile 一样,您的规则的每一行都在单独的 shell 中执行,因此您的“来源 tool_setup.sh”运行s 在与“tool_install_dependencies”分开的 shell 中,这解释了为什么它不起作用。如果您希望它们在同一个 shell 中 运行,请执行“source tool_setup.sh; tool_install_dependencies; tool_build”。
但是,这又是一件非常、非常、非常、非常糟糕的事情。
在 buildroot 中,我创建了一个从 github 获取工具的包。然而,这个工具是使用 buildroot 构建的,而不是从 buildroot 中构建的,所以关于如何使用 buildroot 构建它的典型流程是这样的:
cd github/tool
export BUILDROOT_TOPDIR=$HOME/buildroot
source tool_setup.sh
tool_install_dependencies #Fetches more github dependencies based on git tags defined inside the setenv.sh, and builds them using buildroot
tool_build #Builds the tool and links dependencies
然而,在包文件中这样做是行不通的,因为来自 tool_setup.sh 的别名和 git 标签不是来源,示例包
TOOL_VERSION_VERSION = main
TOOL_VERSION_SITE = git@github.com:tool.git
TOOL_VERSION_SITE_METHOD = git
TOOL_VERSION_INSTALL_TARGET = YES
define TOOL_VERSION_BUILD_CMDS
cd github/tool
export BUILDROOT_TOPDIR=$(PWD)
source tool_setup.sh
tool_install_dependencies
tool_build
endef
define TOOL_VERSION_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 $(@D)/output/tool $(TARGET_DIR)/sbin/
endef
$(eval $(generic-package))
将因 /bin/bash: tool_install_dependencies: command not found
而失败,使用 cmake-package 将失败,因为 CMakelists.txt 无法找到包含依赖项的 git 标签的变量。
我认为您的理解有误。我宁愿建议看看 tool_install_dependencies 和 tool_build 在你的 tools_setup.sh 脚本中做了什么,并在 Buildroot 包中复制它。
根据其名称,tool_install_dependencies 特别可怕,因为您绝对不希望 Buildroot 包自行安装依赖项。
除此之外,直接回答您的问题:与所有 Makefile 一样,您的规则的每一行都在单独的 shell 中执行,因此您的“来源 tool_setup.sh”运行s 在与“tool_install_dependencies”分开的 shell 中,这解释了为什么它不起作用。如果您希望它们在同一个 shell 中 运行,请执行“source tool_setup.sh; tool_install_dependencies; tool_build”。
但是,这又是一件非常、非常、非常、非常糟糕的事情。