`[build].cxxflags` 对所有 target 一视同仁。实际项目中不同 target 经常需要不同编译参数。 **场景 1:contracts 求值语义** ```toml # 所有 target 默认 enforce,test_contracts 需要 observe [targets.test_contracts] kind = "bin" main = "tests/test_contracts.cpp" cxxflags = ["-fcontract-evaluation-semantic=observe"] ``` **场景 2:不同 feature 宏** ```toml [targets.server] kind = "bin" main = "src/server.cpp" cxxflags = ["-DBUILD_SERVER=1", "-DPORT=8080"] [targets.client] kind = "bin" main = "src/client.cpp" cxxflags = ["-DBUILD_CLIENT=1"] ``` **现状:** 只能把标志放全局 `[build].cxxflags`,所有 target 共用。 ** 同级构建系统都有此功能——xmake `target:add("cxflags")`、CMake `target_compile_options`、Cargo `[profile.*.package.*]`、Meson `executable(..., cpp_args:)`。
Activity
Sunrisepeak commentedon Jun 18, 2026
场景1
这个后面会添加相关的优化
场景2
期望cxxflags 只影响到具体的main文件, 还是期望穿透到共享部分?
下面给一个基于workspace的工程方法看是否满足你的需求 (cargo 好像也是不支持同包下不同target指定flag的)
同一个包里,共享代码只编一次、被所有 target 共享,所以它根本无法携带 (多)target 不同的 flag. 如果可以的话 又会导致共用部分多次编译, 可以尝试使用 workspace 拆包 来解决 (达到一样效果)
如果这个宏的控制是在共用部分(core), mcpp提供了 包的feature机制来实现类似需求
skyler-zbt commentedon Jun 18, 2026
只影响 main 文件本身,不需要穿透到共享库。场景是测试 contracts 违规行为,测试代码需要在 observe 模式下观察违规后是否继续执行。谢谢解释。
Sunrisepeak commentedon Jun 18, 2026
如果只是影响 main 本身这个比较容易支持 不影响依赖图, 后面会支持一下
test(e2e): add issue #131 scenario-1 validation (per-target codegen c…
feat(targets): per-target entry-scoped flags + required_features; tes…
Sunrisepeak commentedon Jun 18, 2026
最新版本0.0.55已经支持,
xlings update mcpp -y更新, 相关文档fix: [build].defines is a BuildInputs member, and [build] stops swall…
fix: fold [build].defines into cflags/cxxflags before P1689 scan (#297)