Repository navigation
希望 [targets.<name>] 支持 cxxflags 按目标覆盖 #131
Copy link
Copy link
Labels
enhancementNew feature or requestNew feature or request
Description
Activity
场景1
这个后面会添加相关的优化
场景2
期望cxxflags 只影响到具体的main文件, 还是期望穿透到共享部分?
下面给一个基于workspace的工程方法看是否满足你的需求 (cargo 好像也是不支持同包下不同target指定flag的)
同一个包里,共享代码只编一次、被所有 target 共享,所以它根本无法携带 (多)target 不同的 flag. 如果可以的话 又会导致共用部分多次编译, 可以尝试使用 workspace 拆包 来解决 (达到一样效果)
myproj/ ├── mcpp.toml # [workspace] members = ["libs/core","apps/server","apps/client"] ├── libs/core/ # 共享代码,编一次 │ └── mcpp.toml # [targets.core] kind="lib" ├── apps/server/ │ ├── mcpp.toml # 见下 │ └── src/main.cpp └── apps/client/ └── mcpp.toml # apps/server/mcpp.toml [package] name = "server" [build] cxxflags = ["-DBUILD_SERVER=1", "-DPORT=8080"] # ← 只作用于 server 这个包的编译 [dependencies] core = { path = "../../libs/core" } # apps/client/mcpp.toml [package] name = "client" [build] cxxflags = ["-DBUILD_CLIENT=1"] [dependencies] core = { path = "../../libs/core" } # tests/mcpp.toml
如果这个宏的控制是在共用部分(core), mcpp提供了 包的feature机制来实现类似需求
[dependencies] imgui = { version = "0.0.3", features = ["docking"] } # Request a feature of this dependency只影响 main 文件本身,不需要穿透到共享库。场景是测试 contracts 违规行为,测试代码需要在 observe 模式下观察违规后是否继续执行。谢谢解释。
只影响 main 文件本身,不需要穿透到共享库。场景是测试 contracts 违规行为,测试代码需要在 observe 模式下观察违规后是否继续执行。谢谢解释。
如果只是影响 main 本身这个比较容易支持 不影响依赖图, 后面会支持一下
最新版本0.0.55已经支持,
xlings update mcpp -y更新, 相关文档
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request
[build].cxxflags对所有 target 一视同仁。实际项目中不同 target 经常需要不同编译参数。场景 1:contracts 求值语义
场景 2:不同 feature 宏
现状: 只能把标志放全局
[build].cxxflags,所有 target 共用。** 同级构建系统都有此功能——xmake
target:add("cxflags")、CMaketarget_compile_options、Cargo[profile.*.package.*]、Mesonexecutable(..., cpp_args:)。