@@ -41,12 +41,21 @@ lib-root 约定:主模块接口默认在 `src/mylib.cppm`(包名的最后一段)
4141[package ]
4242name = " myapp" # 包名(必填)
4343version = " 0.1.0" # 语义化版本(必填)
44+ standard = " c++23" # C++ 标准(默认 c++23; 可设 c++26)
4445description = " My awesome app" # 简介(可选)
4546license = " MIT" # 许可证(可选)
4647authors = [" Alice" , " Bob" ] # 作者列表(可选)
4748repo = " https://github.com/user/myapp" # 仓库地址(可选)
4849```
4950
51+ ` standard ` 是 C++ 语言标准的一等配置。推荐值:
52+
53+ - ` c++23 ` :默认值,适合当前模块化默认模板。
54+ - ` c++26 ` :需要 C++26 语言特性时使用。
55+ - ` c++2c ` :兼容别名,解析后归一为 ` c++26 ` 。
56+ - ` gnu++23 ` / ` gnu++26 ` :需要 GNU dialect 时使用,会进入 fingerprint 和 std BMI cache key。
57+ - ` c++latest ` :跟随当前 mcpp 支持的最新标准,适合本地试验,不推荐要求可复现的发布包使用。
58+
5059### 2.2 ` [targets.<name>] ` — 构建目标
5160
5261``` toml
@@ -72,11 +81,20 @@ sources = ["src/**/*.cppm", "src/**/*.cpp"] # 源文件 glob(默认: src/*
7281include_dirs = [" include" , " third_party/include" ] # 头文件搜索路径
7382c_standard = " c11" # C 源文件的标准(默认 c11)
7483cflags = [" -DFOO=1" ] # 额外 C 编译参数
75- cxxflags = [" -DBAR=2" ] # 额外 C++ 编译参数
84+ cxxflags = [" -DBAR=2" ] # 额外 C++ 编译参数(不要放 -std=...)
7685ldflags = [" -lfoo" ] # 额外链接参数
7786static_stdlib = true # 静态链接 libstdc++(默认 true)
7887```
7988
89+ C++ 标准不要通过 ` build.cxxflags = ["-std=..."] ` 配置。请使用:
90+
91+ ``` toml
92+ [package ]
93+ standard = " c++26"
94+ ```
95+
96+ mcpp 会把同一个标准用于普通 C++ 编译、模块扫描、` compile_commands.json ` 和 ` import std ` 的标准库 BMI 构建。
97+
8098** glob 排除** (` ! ` 前缀,mcpp 0.0.4+):
8199
82100``` toml
@@ -285,9 +303,20 @@ mcpp build --target x86_64-linux-musl
285303| 源文件 | ` src/**/*.{cppm,cpp,cc,c} ` | 自动递归扫描 |
286304| 入口 | ` src/main.cpp ` | 有这个文件就推断为 ` bin ` 目标 |
287305| 库根 | ` src/<pkg-tail>.cppm ` | 可用 ` [lib].path ` 覆盖 |
288- | 标准 | ` c++23 ` | C++23 模块是一等公民 |
306+ | C++ 标准 | ` c++23 ` | 用 ` [package].standard ` 配置; 支持 ` c++26 ` / ` c++2c ` |
289307| C 标准 | ` c11 ` | ` .c ` 文件自动走 C 编译器 |
290308| 静态 stdlib | ` true ` | 便携二进制 |
291309| 头文件 | ` include/ ` (如果存在) | 自动加到 ` -I ` |
292310| 测试 | ` tests/**/*.cpp ` | ` mcpp test ` 自动发现 |
293311| 依赖命名空间 | ` mcpp ` (默认) | 平铺写法走默认 ns |
312+
313+ ### 4.1 旧 ` [language] ` 兼容层
314+
315+ 旧配置仍可读取:
316+
317+ ``` toml
318+ [language ]
319+ standard = " c++26"
320+ ```
321+
322+ 新项目请使用 ` [package].standard ` 。如果两个位置都出现,` [package].standard ` 是权威配置。
0 commit comments