使用B2的obj规则时出现name.obj命名冲突错误,求解释
B2构建工具"Name clash"错误解析
错误本质
这个报错表明你要生成的name.obj目标文件被重复触发构建请求,虽然报错里显示两次构建的属性集都是"none",但B2的目标唯一性校验逻辑判定这是冲突。
常见触发场景
- 项目中存在重复的
obj目标定义:比如在不同的Jamfile/Jamroot文件里,再次写了obj name : ... ;这样的规则 - 其他构建规则间接生成了同名目标:比如某个
exe或lib目标也依赖了$(CPP_FILES),并且隐式编译生成了name.obj - 路径解析冲突:不同上下文的相对路径最终指向了同一个输出文件
name.obj
可行的排查方向
- 全局搜索所有Jam文件,确保没有重复定义同名的
obj目标 - 给
obj目标指定唯一的输出路径,比如添加<location>属性:obj name : $(CPP_FILES) : <location>./build/obj ; - 梳理依赖关系,避免不同规则重复编译同一组源文件生成同名目标
内容的提问来源于stack exchange,提问作者Gabriel Devillers
相关产品推荐
相关产品推荐

