Skip to content

fix(build): feature sources 在 mcpp test 下不编译 (0.0.94)#218

Merged
Sunrisepeak merged 1 commit into
mainfrom
fix/feature-sources-test-mode
Jul 15, 2026
Merged

fix(build): feature sources 在 mcpp test 下不编译 (0.0.94)#218
Sunrisepeak merged 1 commit into
mainfrom
fix/feature-sources-test-mode

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

根因

prepare_build() 把 feature 源集解析(drop + add)整段门在 !includeDevDeps
(src/build/prepare.cppm),而 mcpp testincludeDevDeps = true激活
feature 的 sources 从不被加回构建图

叠加 xpkg 侧的事实:features.X.sources 只落进 buildConfig.featureSources[X]
(src/manifest/xpkg.cppm),从不进 base sources。两者一合:

descriptor 形态 mcpp build mcpp test
glob 同时在 base sourcesfeatures(gtest 的 gtest_main.cc) ✅(跳过 drop 也还在)
glob features 下(xpkg 常态) undefined reference

那段注释原本假设「descriptor 会把 gtest_main.cc 同时留在 base sources 里,故 test
模式不受影响」——这个前提只对 gtest 成立,是个未被察觉的隐式耦合。门自 #169
(0.0.65,修 #168 gtest_main LNK2005)引入后未动过。

命中面

eigen_blasdgemm_ 一直被记为「把 feature 编出的依赖目标链进 test 二进制是
follow-up」——定性是错的
:不是链接问题,是源集解析问题。

修复

  • drop 仍只在 build 模式做 —— mcpp test 需要保留完整源面,让 dev-dep 轨的
    per-test main 检测看得见 gtest_main.cc 并逐 test 剪枝(e2e 79 锁住)。
  • add 改为两模式都做 + 去重 —— gtest 那种 base/feature 双列的 glob 不会进两次。

净 diff 4 行逻辑。

验证

prepare_build() 把 feature 源集解析(drop + add)整段门在 `!includeDevDeps`,
`mcpp test` 走 includeDevDeps=true → 激活 feature 的 sources 从不被加回构建图。
xpkg 的 `features.X.sources` 只落进 featureSources、从不进 base sources,故
「只在 features 下声明」的包 build 正常、test 必然 undefined reference。

命中 compat.cjson `utils`、compat.eigen `eigen_blas`(dgemm_)、compat.spdlog
`compiled`。eigen_blas 的 dgemm_ 一直被记为「链进 test 二进制是 follow-up」,
定性是错的:不是链接问题,是源集解析问题。

drop 仍只在 build 模式做(test 模式需保留完整源面供 dev-dep 轨 per-test main
检测剪枝,见 e2e 79);add 改为两模式都做 + 去重(gtest 双列 glob 不会进两次)。

回归测试 e2e 100:已验证在未修复的 0.0.92 上以目标错误失败、修复后通过;
e2e 78/79(#168 gtest 回归靶子)与单测 35/35 均通过。
@Sunrisepeak Sunrisepeak merged commit e243856 into main Jul 15, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant