File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -65,6 +65,29 @@ mcpp run
6565
6666注: 初次构建需要初始化环境并获取工具链, 可能需要一些时间
6767
68+ ## 工作空间 (Workspace)
69+
70+ mcpp 支持多包工作空间,在一个仓库中管理多个相关的库和应用:
71+
72+ ``` toml
73+ # 根 mcpp.toml
74+ [workspace ]
75+ members = [" libs/core" , " libs/http" , " apps/server" ]
76+
77+ [workspace .dependencies .compat ]
78+ mbedtls = " 3.6.1"
79+ ```
80+
81+ ``` bash
82+ mcpp build # 构建所有 member
83+ mcpp build -p server # 只构建 server 及其依赖
84+ ```
85+
86+ - member 之间用 ` path = "..." ` 声明依赖
87+ - ` .workspace = true ` 继承 workspace 统一管理的依赖版本
88+ - 工具链配置可继承和覆盖
89+ - 详见 [ examples/04-workspace] ( examples/04-workspace/ )
90+
6891## 文档
6992
7093- [ 快速开始] ( docs/00-getting-started.md )
Original file line number Diff line number Diff line change 1+ # 04 — workspace
2+
3+ 多包工作空间示例:两个库 + 一个应用,共享 namespace。
4+
5+ ```
6+ 04-workspace/
7+ ├── mcpp.toml # [workspace] 声明 members
8+ ├── libs/
9+ │ ├── core/ # 基础库 → export module demo.core
10+ │ └── greeter/ # 依赖 core → export module demo.greeter
11+ └── apps/
12+ └── hello/ # 依赖 greeter → 可执行文件
13+ ```
14+
15+ ## 构建 & 运行
16+
17+ ``` bash
18+ cd 04-workspace
19+
20+ # 从 workspace 根目录构建(自动选择 hello 作为构建目标)
21+ mcpp build
22+ mcpp run
23+
24+ # 指定构建某个 member
25+ mcpp build -p hello
26+ ```
27+
28+ ## 要点
29+
30+ - 根 ` mcpp.toml ` 只有 ` [workspace] ` ,没有 ` [package] ` (虚拟工作空间)
31+ - member 之间用 ` path = "..." ` 声明依赖,与普通项目完全一致
32+ - 所有 member 共享同一个 namespace(` demo ` ),module 名为 ` demo.core ` 、` demo.greeter `
33+ - C++ module 的 ` export ` / ` import ` 控制接口可见性,构建工具不做额外限制
Original file line number Diff line number Diff line change 1+ [package ]
2+ namespace = " demo"
3+ name = " hello"
4+ version = " 0.1.0"
5+
6+ [dependencies ]
7+ greeter = { path = " ../../libs/greeter" }
Original file line number Diff line number Diff line change 1+ import std;
2+ import demo.greeter;
3+ import demo.core;
4+
5+ int main () {
6+ std::println (" {}" , demo::greeter::greet ());
7+ std::println (" core version: {}" , demo::core::version ());
8+ return 0 ;
9+ }
Original file line number Diff line number Diff line change 1+ [package ]
2+ namespace = " demo"
3+ name = " core"
4+ version = " 0.1.0"
5+
6+ [targets .core ]
7+ kind = " lib"
Original file line number Diff line number Diff line change 1+ export module demo.core;
2+ import std;
3+
4+ export namespace demo ::core {
5+
6+ inline std::string version () { return " 0.1.0" ; }
7+
8+ inline std::string greet_target () { return " World" ; }
9+
10+ }
Original file line number Diff line number Diff line change 1+ [package ]
2+ namespace = " demo"
3+ name = " greeter"
4+ version = " 0.1.0"
5+
6+ [targets .greeter ]
7+ kind = " lib"
8+
9+ [dependencies ]
10+ core = { path = " ../core" }
Original file line number Diff line number Diff line change 1+ export module demo.greeter;
2+ import std;
3+ import demo.core;
4+
5+ export namespace demo ::greeter {
6+
7+ inline std::string greet () {
8+ return " Hello, " + demo::core::greet_target () + " !" ;
9+ }
10+
11+ }
Original file line number Diff line number Diff line change 1+ [workspace ]
2+ members = [
3+ " libs/core" ,
4+ " libs/greeter" ,
5+ " apps/hello" ,
6+ ]
You can’t perform that action at this time.
0 commit comments