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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions