Skip to content

Commit 3c326cd

Browse files
committed
docs: add workspace example + README workspace section
- examples/04-workspace/: 3-member workspace (core + greeter + hello) - README.md: add workspace section with usage overview
1 parent 8e89174 commit 3c326cd

9 files changed

Lines changed: 116 additions & 0 deletions

File tree

README.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff 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)

examples/04-workspace/README.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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` 控制接口可见性,构建工具不做额外限制
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[package]
2+
namespace = "demo"
3+
name = "hello"
4+
version = "0.1.0"
5+
6+
[dependencies]
7+
greeter = { path = "../../libs/greeter" }
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
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+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[package]
2+
namespace = "demo"
3+
name = "core"
4+
version = "0.1.0"
5+
6+
[targets.core]
7+
kind = "lib"
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
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+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
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" }
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+
}

examples/04-workspace/mcpp.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[workspace]
2+
members = [
3+
"libs/core",
4+
"libs/greeter",
5+
"apps/hello",
6+
]

0 commit comments

Comments
 (0)