为什么 Buildroot 不为每个过程添加到构建的项目特定主机包提供 make 目标?
Why would Buildroot not provide make target for a project-specific host package added to the build per procedure?
这些年来,我经常使用 Buildroot,而且我总是设法找到解决我遇到的障碍的方法。但是这个让我转了一圈。
我已经添加了一个 git 来源的 python 工具作为主机包到我的 ARM 目标的 Buildroot 构建中。我已经完成了 package/Config.in.host 和 package/toolname/Config.in.host 以及 package/toolname/toolname.mk 文件的工作。一切看起来都井井有条。我将工作与 add_new_package.wizard 输出的内容进行了比较。
新选项确实出现在菜单配置中。
它不能作为制作目标使用,尽管我确实有我包含的目标端包,它们是有效的制作目标。即我可以 运行:
制作目标端包名
这些软件包构建得很好。
我不能运行:
make host-side-package-name 因为我收到错误 "No rule to make target".
所以肯定是我对主机包做错了什么,尽管我显然对目标包做了正确的事情。
一切都指向 Buildroot 只是忽略了我的主机包,而不是将其粘贴到 menuconfig 中。我在网上搜索的时间没有一个 post 关于有人遇到同样的问题。我遗漏了一些我认为很明显的东西。
我的问题是 - 我可以进行哪些调试,我可以在哪里查找导致 Buildroot 无法正确识别我的新包的原因?
编辑:我相信我现在明白问题的一部分是构建顺序,也许我可以用依赖指令解决一个问题。我首先构建了依赖于主机包的目标包。我原以为常识会要求首先处理主机包,但这显然不是真的。
编辑:发布 .mk 文件
TOOLNAME_VERSION = 2
TOOLNAME_SITE = $(call github,devname,toolname,$(TOOLNAME_VERSION))
TOOLNAME_SETUP_TYPE = setuptools
TOOLNAME_LICENSE = GPL-3.0
TOOLNAME_LICENSE_FILES = LICENSE
HOST_TOOLNAME_DEPENDENCIES = host-python-library
$(eval $(host-python-package))
TOOLNAME = $(HOST_DIR)/usr/bin/toolname
正如我之前暗示的那样,现在 运行ning 很好所以我知道它大部分设置正确,剩下的问题是缺少 make 目标。根据 Buildroot 手册,我应该有一个可用的。
我现在发现缺少的 make 目标实际上导致无法构建依赖于此目标的其他包。依赖包的构建现在失败了,因为 "No rule to make" 在它依赖的工具包上
TARGET_PACKAGE_DEPENDENCIES = 工具名
你能post你的toolname.mk吗?听起来你忘了添加 $(eval $(host-python-package)) 行。
哈利路亚!答案是 make 目标名称不是工具名,而是主机工具名。问题的根本原因是 Buildroot 文档的第 8.12.5 节中没有提及这种细微差别。我在第 17 章研究包依赖性时偶然发现了答案,它确实确定了特定情况下的正确用法。
这些年来,我经常使用 Buildroot,而且我总是设法找到解决我遇到的障碍的方法。但是这个让我转了一圈。
我已经添加了一个 git 来源的 python 工具作为主机包到我的 ARM 目标的 Buildroot 构建中。我已经完成了 package/Config.in.host 和 package/toolname/Config.in.host 以及 package/toolname/toolname.mk 文件的工作。一切看起来都井井有条。我将工作与 add_new_package.wizard 输出的内容进行了比较。
新选项确实出现在菜单配置中。
它不能作为制作目标使用,尽管我确实有我包含的目标端包,它们是有效的制作目标。即我可以 运行: 制作目标端包名 这些软件包构建得很好。
我不能运行: make host-side-package-name 因为我收到错误 "No rule to make target".
所以肯定是我对主机包做错了什么,尽管我显然对目标包做了正确的事情。
一切都指向 Buildroot 只是忽略了我的主机包,而不是将其粘贴到 menuconfig 中。我在网上搜索的时间没有一个 post 关于有人遇到同样的问题。我遗漏了一些我认为很明显的东西。
我的问题是 - 我可以进行哪些调试,我可以在哪里查找导致 Buildroot 无法正确识别我的新包的原因?
编辑:我相信我现在明白问题的一部分是构建顺序,也许我可以用依赖指令解决一个问题。我首先构建了依赖于主机包的目标包。我原以为常识会要求首先处理主机包,但这显然不是真的。
编辑:发布 .mk 文件
TOOLNAME_VERSION = 2
TOOLNAME_SITE = $(call github,devname,toolname,$(TOOLNAME_VERSION))
TOOLNAME_SETUP_TYPE = setuptools
TOOLNAME_LICENSE = GPL-3.0
TOOLNAME_LICENSE_FILES = LICENSE
HOST_TOOLNAME_DEPENDENCIES = host-python-library
$(eval $(host-python-package))
TOOLNAME = $(HOST_DIR)/usr/bin/toolname
正如我之前暗示的那样,现在 运行ning 很好所以我知道它大部分设置正确,剩下的问题是缺少 make 目标。根据 Buildroot 手册,我应该有一个可用的。
我现在发现缺少的 make 目标实际上导致无法构建依赖于此目标的其他包。依赖包的构建现在失败了,因为 "No rule to make" 在它依赖的工具包上 TARGET_PACKAGE_DEPENDENCIES = 工具名
你能post你的toolname.mk吗?听起来你忘了添加 $(eval $(host-python-package)) 行。
哈利路亚!答案是 make 目标名称不是工具名,而是主机工具名。问题的根本原因是 Buildroot 文档的第 8.12.5 节中没有提及这种细微差别。我在第 17 章研究包依赖性时偶然发现了答案,它确实确定了特定情况下的正确用法。