Skip to content

[bug] #233 消歧后链接输入未跟随改名:依赖包与消费者同名源(如双方都有 main.cpp)即 'obj/main.o missing and no known rule' #240

Description

@Sunrisepeak

现象

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.cppmodules/geometry/src/main.cpp,
src/main.cpp 几乎是每个消费者的入口文件名 → 一碰即挂。任何依赖包源文件名
与消费者源文件重名(util.cpp/types.cpp/…)都会触发,包作者侧无法规避——
这是 de-stub 化(撤掉 mcpp#233 时代的转发 stub 层)的当前唯一阻塞点。

环境

mcpp 0.0.97 · linux x86_64

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions