现象
0.0.97 的 #233 对象路径碰撞消歧,在「依赖包源文件与消费者源文件同 basename」时:
编译边的对象路径正确改成了镜像相对路径(如 obj/a240/src/main.o),但可执行目标的
链接输入仍引用消歧前的旧名 obj/main.o → ninja 报
'obj/main.o', needed by 'bin/<app>', missing and no known rule to make it。
最小复现(2 文件)
dep/mcpp.toml [build] sources = ["lib/main.cpp"]
dep/lib/main.cpp int dep_fn() { return 7; }
app/mcpp.toml [dependencies] d240 = { path = "../dep" }
app/src/main.cpp extern int dep_fn(); int main(){ return dep_fn()==7?0:1; }
cd app && mcpp run →
Compiling d240 (path)
error: build failed
ninja: error: 'obj/main.o', needed by 'bin/a240', missing and no known rule to make it
build.ninja 里可见编译边已消歧(build obj/a240/src/main.cpp.ddi … compile_target = obj/a240/src/main.o),只有链接 inputs 漏更新。
影响(实际踩到的场景)
compat.opencv v2 描述符(de-stub:真实路径 sources,依赖 0.0.97 的 #233 修复)——
OpenCV 自带 modules/imgproc/src/main.cpp 与 modules/geometry/src/main.cpp,
而 src/main.cpp 几乎是每个消费者的入口文件名 → 一碰即挂。任何依赖包源文件名
与消费者源文件重名(util.cpp/types.cpp/…)都会触发,包作者侧无法规避——
这是 de-stub 化(撤掉 mcpp#233 时代的转发 stub 层)的当前唯一阻塞点。
环境
mcpp 0.0.97 · linux x86_64
现象
0.0.97 的 #233 对象路径碰撞消歧,在「依赖包源文件与消费者源文件同 basename」时:
编译边的对象路径正确改成了镜像相对路径(如
obj/a240/src/main.o),但可执行目标的链接输入仍引用消歧前的旧名
obj/main.o→ ninja 报'obj/main.o', needed by 'bin/<app>', missing and no known rule to make it。最小复现(2 文件)
cd app && mcpp run→build.ninja 里可见编译边已消歧(
build obj/a240/src/main.cpp.ddi … compile_target = obj/a240/src/main.o),只有链接 inputs 漏更新。影响(实际踩到的场景)
compat.opencv v2 描述符(de-stub:真实路径 sources,依赖 0.0.97 的 #233 修复)——
OpenCV 自带
modules/imgproc/src/main.cpp与modules/geometry/src/main.cpp,而
src/main.cpp几乎是每个消费者的入口文件名 → 一碰即挂。任何依赖包源文件名与消费者源文件重名(util.cpp/types.cpp/…)都会触发,包作者侧无法规避——
这是 de-stub 化(撤掉 mcpp#233 时代的转发 stub 层)的当前唯一阻塞点。
环境
mcpp 0.0.97 · linux x86_64