## 现象 `[build].cflags/cxxflags` 中的相对 `-I` 会被 mcpp 重写为项目根绝对路径(编译命令中可见),但 `-iquote`(推测 `-isystem` / `-idirafter` 同类)**不做重写**,按 ninja 构建目录解析,导致头文件静默找不到。 ## 复现(mcpp 0.0.95, linux, gcc@16.1.0) ``` proj/ ├── hdr/magic.h # #define MAGIC 42 ├── src/c.c # #include "magic.h" └── mcpp.toml ``` ```toml [build] cflags = ["-iquotehdr"] ``` `mcpp build` → `fatal error: magic.h: No such file or directory`;换成 `cflags = ["-Ihdr"]` 则正常(命令行里已被绝对化)。 ## 期望 include 族 flag(`-I` / `-iquote` / `-isystem` / `-idirafter`)的相对路径统一按项目根重写;或至少在文档标注"仅 `-I` 支持相对路径"。 ## 背景 ffmpeg-m 打包时想用 `-iquote` 精确复刻上游"引号 include 搜库根、角括号不受影响"的语义(避免 `-I<libavutil>` 劫持 `#include <time.h>`),因该问题只能退回按上游范围收窄的 `-I`。踩坑记录见 mcpplibs/ffmpeg-m `.agents/docs/2026-07-18-ffmpeg-m-implementation.md`。
Activity
feat: FFmpeg 8.1.2 as C++23 modules — thin module layer over compat.f…
Sunrisepeak commentedon Jul 18, 2026
✅ 已在 mcpp 0.0.97 修复(PR #236,
b71d93c,簇 A)。include 族相对路径统一按项目根重写:
-iquote/-isystem/-idirafter/-iprefix/-L现与-I一致绝对化(joined 与 separated 两种拼写都处理),取代原先只认-I的absolutize_include_flags。顺带修正了[build] include_dirs在 MSVC 方言下的绝对化。验证:单测
BuildFlags.NormalizeIncludeFlagsRewritesFullIncludeFamily+ e2e116_include_family_and_define_spaces.sh(-iquotehdr头文件解析)。