Yocto Bitbake:如何仅从Native构建中排除Recipe依赖库B
解决Yocto中应用A-native依赖B-native不存在的问题
问题根源
构建应用A的native版本时,Yocto会自动把DEPENDS里的B转换为B-native,但库B只有目标机版本的recipe,没有native版本,因此触发Nothing PROVIDES B-native错误。
正确解决方案
你需要让仅目标机版本的A依赖B,native版本的A不添加该依赖,以下是几种可行写法:
写法1:通过构建类区分
在A的recipe中添加:
DEPENDS += "B" # 移除native构建场景下的B依赖 DEPENDS_class-native_remove = "B"
这种方式直接针对native构建逻辑移除依赖,简洁清晰。
写法2:仅给目标机版本指定依赖
如果不想先添加再移除,也可以直接只给目标机版本的A配置依赖:
# 仅给${PN}(目标机版本的A)添加B依赖 DEPENDS_${PN} += "B"
这种写法下,native版本的A的DEPENDS不会包含B,自然不会去寻找B-native。
写法3:条件判断动态添加
利用BitBake的条件语法,根据当前构建任务决定是否添加B:
DEPENDS += "${@'' if 'native' in d.getVar('BB_CURRENT_TASK') else 'B'}"
你之前的写法无效原因
你用的DEPENDS-${PN}-native_remove = "B-native"有两个问题:
- Yocto处理native构建时,会先把DEPENDS里的
B转换为B-native再去查找依赖,此时移除B-native已经晚了; - 正确逻辑应该在依赖转换前就移除
B,而不是转换后的B-native。
内容的提问来源于stack exchange,提问作者Faroguy
相关产品推荐
相关产品推荐

