# CLI 命令参考
所有 CCGO 命令的完整命令行参考。
## 概述
CCGO 为 C++ 跨平台开发提供了全面的 CLI 工具,具有快速启动时间和零 Python 依赖(Rust 实现)。
## 全局选项
适用于所有命令:
```bash
ccgo [GLOBAL_OPTIONS] <COMMAND> [COMMAND_OPTIONS]
```
| `-h, --help` | 打印帮助信息 |
| `-V, --version` | 打印版本信息 |
| `-v, --verbose` | 启用详细输出 |
| `--no-color` | 禁用彩色终端输出 |
## 命令概览
| **项目** | [new](#new) | 创建新项目 |
| | [init](#init) | 在现有项目中初始化 CCGO |
| **构建** | [build](#build) | 为目标平台构建 |
| | [run](#run) | 构建并运行示例/二进制文件 |
| | [test](#test) | 运行 GoogleTest 单元测试 |
| | [bench](#bench) | 运行 Google Benchmark 基准测试 |
| | [doc](#doc) | 生成 Doxygen 文档 |
| **依赖** | [install](#install) | 从 CCGO.toml 安装依赖 |
| | [add](#add) | 添加依赖 |
| | [remove](#remove) | 移除依赖 |
| | [update](#update) | 更新依赖到最新兼容版本 |
| | [vendor](#vendor) | 将依赖复制到 vendor/ 目录以供离线构建 |
| | [tree](#tree) | 显示依赖树 |
| **发现** | [search](#search) | 搜索包 |
| | [collection](#collection) | 管理包集合 |
| **发布** | [publish](#publish) | 发布到包管理器 |
| | [package](#package) | 打包 SDK 以供分发 |
| **维护** | [check](#check) | 检查平台要求 |
| | [clean](#clean) | 清理构建产物 |
| | [tag](#tag) | 创建版本标签 |
---
## new
从模板创建新的 CCGO 项目。
```bash
ccgo new [OPTIONS] <NAME>
```
### 参数
- `<NAME>` - 项目名称(必需)
### 选项
| `--template <URL>` | 自定义 Copier 模板 URL |
| `--defaults` | 使用默认值,不进行交互提示 |
| `--vcs-ref <REF>` | 模板 git 引用(分支/标签)|
### 示例
```bash
# 使用交互提示创建新项目
ccgo new myproject
# 使用默认值创建
ccgo new myproject --defaults
# 使用自定义模板
ccgo new myproject --template https://github.com/user/template
# 使用特定模板版本
ccgo new myproject --vcs-ref v2.0.0
```
---
## init
在现有项目中初始化 CCGO。
```bash
ccgo init [OPTIONS]
```
### 选项
| `--template <URL>` | 自定义 Copier 模板 URL |
| `--defaults` | 使用默认值,不进行交互提示 |
| `--force` | 覆盖现有文件 |
### 示例
```bash
# 在当前目录初始化
ccgo init
# 强制覆盖现有文件
ccgo init --force
```
---
## build
为特定平台构建 C++ 库。
```bash
ccgo build [OPTIONS] <TARGET>
```
### 参数
- `<TARGET>` - 构建目标(必需)
**可用目标:**
| `all` | 所有支持的平台 |
| `apple` | 所有苹果平台(iOS、macOS、watchOS、tvOS)|
| `android` | Android(基于 NDK)|
| `ios` | iOS(arm64、模拟器)|
| `macos` | macOS(x86_64、arm64 通用二进制)|
| `windows` | Windows(MSVC/MinGW)|
| `linux` | Linux(GCC/Clang)|
| `ohos` | OpenHarmony(基于 Hvigor)|
| `watchos` | Apple Watch |
| `tvos` | Apple TV |
| `kmp` | Kotlin 多平台 |
| `conan` | Conan 包 |
### 选项
| `--arch <ARCH>` | 目标架构(逗号分隔)|
| `--link-type <TYPE>` | `static`、`shared` 或 `both`(默认:`both`)|
| `--docker` | 使用 Docker 容器构建 |
| `--auto-docker` | 当本地构建不可用时自动检测并使用 Docker |
| `-j, --jobs <N>` | 并行构建作业数 |
| `--ide-project` | 生成 IDE 项目文件(Xcode、Visual Studio 等)|
| `--release` | 以发布模式构建(默认:调试)|
| `--native-only` | 仅构建本地库,跳过 AAR/HAR 打包 |
| `--toolchain <TOOL>` | Windows 工具链:`msvc`、`mingw`、`auto`(默认:`auto`)|
| `--dev` | 开发模式(在 Docker 中使用 GitHub 上的预构建 ccgo)|
| `-F, --features <FEATURES>` | 启用特性(逗号分隔)|
| `--no-default-features` | 禁用默认特性 |
| `--all-features` | 启用所有可用特性 |
### 平台特定架构
**Android:**
- `armeabi-v7a` - ARM 32 位
- `arm64-v8a` - ARM 64 位(默认)
- `x86` - Intel 32 位(模拟器)
- `x86_64` - Intel 64 位(模拟器)
**iOS:**
- `arm64` - iPhone/iPad(默认)
- `simulator` - 模拟器(自动检测主机架构)
**macOS:**
- `x86_64` - Intel Mac
- `arm64` - Apple Silicon
- 默认创建通用二进制(两种架构)
**Windows:**
- `x86_64` - 64 位(默认)
**Linux:**
- `x86_64` - 64 位(默认)
- `aarch64` - ARM 64 位
**OpenHarmony:**
- `armeabi-v7a` - ARM 32 位
- `arm64-v8a` - ARM 64 位(默认)
- `x86_64` - Intel 64 位
### 特性系统
使用特性控制条件编译:
```bash
# 启用特定特性
ccgo build android --features networking,ssl
# 禁用默认特性并仅启用特定特性
ccgo build android --features minimal --no-default-features
# 启用所有特性
ccgo build android --all-features
```
特性在 `CCGO.toml` 中定义:
```toml
[features]
default = ["networking"]
networking = []
ssl = ["networking"]
advanced = ["networking", "ssl"]
```
### Docker 构建
使用 Docker 从任何操作系统构建任何平台:
```bash
# 显式使用 Docker
ccgo build linux --docker
ccgo build windows --docker
ccgo build android --docker
# 在需要时自动检测(例如,从 macOS 构建 Linux)
ccgo build linux --auto-docker
```
**优势:**
- 通用交叉编译
- 无需本地工具链安装
- 一致的构建环境
- Docker Hub 上的预构建镜像
### 示例
```bash
# 使用特定架构构建 Android
ccgo build android --arch arm64-v8a,armeabi-v7a
# 以发布模式构建 iOS
ccgo build ios --release
# 为所有苹果平台构建
ccgo build apple --release
# 仅使用 MSVC 工具链构建 Windows
ccgo build windows --toolchain msvc
# 使用 Docker 构建 Linux(从 macOS/Windows)
ccgo build linux --docker
# 使用并行作业构建
ccgo build android -j 8
# 构建并生成 Xcode 项目
ccgo build ios --ide-project
# 使用特定特性构建
ccgo build android --features networking,ssl --release
# 构建所有平台
ccgo build all --release
```
### 构建输出
构建输出到 `target/<platform>/`,采用统一的归档结构:
```
target/android/
└── mylib_Android_SDK-1.0.0.zip
├── lib/
│ ├── static/arm64-v8a/libmylib.a
│ └── shared/arm64-v8a/libmylib.so
├── haars/mylib.aar
├── include/mylib/
└── build_info.json
```
---
## test
运行项目测试。
```bash
ccgo test [OPTIONS] [PLATFORM]
```
### 参数
- `[PLATFORM]` - 测试平台(默认:当前)
### 选项
| `--filter <PATTERN>` | 运行匹配模式的测试 |
| `--verbose` | 详细测试输出 |
| `--no-fail-fast` | 失败后继续运行测试 |
### 示例
```bash
# 运行所有测试
ccgo test
# 运行特定测试
ccgo test --filter test_name
# 详细运行测试
ccgo test --verbose
```
---
## bench
运行项目基准测试。
```bash
ccgo bench [OPTIONS] [PLATFORM]
```
### 参数
- `[PLATFORM]` - 基准测试平台(默认:当前)
### 选项
| `--filter <PATTERN>` | 运行匹配模式的基准测试 |
| `--baseline <NAME>` | 保存/比较基线 |
### 示例
```bash
# 运行所有基准测试
ccgo bench
# 运行特定基准测试
ccgo bench --filter bench_name
# 保存基线
ccgo bench --baseline main
# 与基线比较
ccgo bench --baseline main
```
---
## doc
生成项目文档。
```bash
ccgo doc [OPTIONS]
```
### 选项
| `--open` | 在浏览器中打开文档 |
| `--no-deps` | 不包含依赖 |
| `--format <FMT>` | 输出格式:html、markdown |
### 示例
```bash
# 生成并打开文档
ccgo doc --open
# 生成 markdown 文档
ccgo doc --format markdown
```
---
## install
安装项目依赖。
```bash
ccgo install [OPTIONS]
```
### 选项
| `--locked` | 使用 CCGO.lock 中的精确版本 |
| `--offline` | 仅使用 vendored 依赖 |
### 示例
```bash
# 安装依赖
ccgo install
# 使用锁定版本安装
ccgo install --locked
# 离线安装
ccgo install --offline
```
---
## update
将依赖更新到最新兼容版本。
```bash
ccgo update [OPTIONS] [DEPENDENCY]
```
### 参数
- `[DEPENDENCY]` - 要更新的特定依赖(可选)
### 选项
| `--dry-run` | 显示将要更新的内容 |
### 示例
```bash
# 更新所有依赖
ccgo update
# 更新特定依赖
ccgo update spdlog
# 预演
ccgo update --dry-run
```
---
## vendor
将所有依赖复制到 vendor/ 目录以供离线构建。
```bash
ccgo vendor [OPTIONS]
```
### 选项
| `--no-delete` | 不删除现有 vendor 目录 |
### 示例
```bash
# Vendor 所有依赖
ccgo vendor
# 保留现有 vendor 目录
ccgo vendor --no-delete
```
---
## tree
显示项目依赖树及各种可视化选项。
```bash
ccgo tree [OPTIONS] [PACKAGE]
```
### 参数
- `[PACKAGE]` - 显示特定包的依赖(可选)
### 选项
| `-d, --depth <DEPTH>` | 显示的最大深度(默认:无限制)|
| `--no-dedupe` | 不去重复的依赖 |
| `-l, --locked` | 从锁文件显示依赖版本 |
| `-f, --format <FORMAT>` | 输出格式:text、json、dot(默认:text)|
| `--duplicates` | 仅显示重复的依赖 |
| `-i, --invert <PACKAGE>` | 显示依赖此包的包 |
| `--conflicts` | 高亮版本冲突 |
### 输出格式
**Text**(默认):
- 使用框绘字符的树状可视化
- 显示依赖层次结构
- 用 `(*)` 标记重复项
**JSON**:
- 包含版本和源信息的结构化数据
- 包含冲突检测结果
- 适合程序化处理
**DOT**(Graphviz):
- 图形可视化格式
- 以红色高亮冲突
- 可使用 `dot` 命令渲染
### 示例
```bash
# 显示完整依赖树
ccgo tree
# 限制深度为 2 级
ccgo tree --depth 2
# 显示特定包的依赖
ccgo tree spdlog
# 显示所有出现(不去重)
ccgo tree --no-dedupe
# 输出为 JSON
ccgo tree --format json
# 生成 Graphviz 图表
ccgo tree --format dot > deps.dot
dot -Tpng deps.dot -o deps.png
# 显示反向依赖
ccgo tree --invert fmt
# 高亮版本冲突
ccgo tree --conflicts
# 仅显示重复的依赖
ccgo tree --duplicates
# 使用 CCGO.toml.lock 中的锁定版本
ccgo tree --locked
```
---
## search
在已订阅的集合中搜索包。
```bash
ccgo search <QUERY> [OPTIONS]
```
### 参数
- `<QUERY>` - 搜索关键词或模式(必需)
### 选项
| `-c, --collection <NAME>` | 仅在特定集合中搜索 |
| `-d, --details` | 显示详细的包信息 |
| `--limit <N>` | 限制结果数量(默认:20)|
### 示例
```bash
# 在所有集合中搜索包
ccgo search json
# 在特定集合中搜索
ccgo search logging --collection official
# 显示详细信息
ccgo search crypto --details
# 限制结果为 50
ccgo search lib --limit 50
# 组合选项
ccgo search network --collection community --details --limit 10
```
### 搜索结果
结果包括:
- 包名和版本
- 摘要描述
- 源集合
- 仓库 URL(使用 --details)
- 支持的平台(使用 --details)
- 许可证信息(使用 --details)
- 关键词(使用 --details)
---
## collection
管理用于发现的包集合。
```bash
ccgo collection <SUBCOMMAND> [OPTIONS]
```
### 子命令
| `add <URL>` | 添加新集合 |
| `list` | 列出所有已订阅的集合 |
| `remove <NAME>` | 移除集合 |
| `refresh [NAME]` | 刷新集合 |
### collection add
添加新的包集合。
```bash
ccgo collection add <URL>
```
**支持的 URL 方案:**
- `file://` - 本地文件路径
- `http://` - HTTP URL
- `https://` - HTTPS URL
**参数:**
- `<URL>` - 集合 URL(必需)
**示例:**
```bash
# 添加官方集合
ccgo collection add https://ccgo.dev/collections/official.json
# 添加社区集合
ccgo collection add https://ccgo.dev/collections/community.json
# 添加本地集合
ccgo collection add file:///path/to/my-collection.json
# 从 HTTP 添加
ccgo collection add http://example.com/packages.json
```
### collection list
列出所有已订阅的集合。
```bash
ccgo collection list [OPTIONS]
```
**选项:**
| `-d, --details` | 显示详细信息 |
**示例:**
```bash
# 列出集合
ccgo collection list
# 显示详细信息
ccgo collection list --details
```
### collection remove
移除已订阅的集合。
```bash
ccgo collection remove <NAME_OR_URL>
```
**参数:**
- `<NAME_OR_URL>` - 集合名称或 URL(必需)
**示例:**
```bash
# 按名称移除
ccgo collection remove official
# 按 URL 移除
ccgo collection remove https://ccgo.dev/collections/community.json
```
### collection refresh
刷新集合数据。
```bash
ccgo collection refresh [NAME]
```
**参数:**
- `[NAME]` - 要刷新的集合名称(可选,默认:全部)
**示例:**
```bash
# 刷新所有集合
ccgo collection refresh
# 刷新特定集合
ccgo collection refresh official
```
---
## add
向 CCGO.toml 添加依赖。
```bash
ccgo add [OPTIONS] <DEPENDENCY>
```
### 参数
- `<DEPENDENCY>` - 依赖规范
### 依赖格式
```bash
# Git 仓库
ccgo add spdlog --git https://github.com/gabime/spdlog.git --tag v1.12.0
# 本地路径
ccgo add mylib --path ../mylib
# 注册表(未来)
ccgo add fmt@10.1.1
```
### 选项
| `--git <URL>` | Git 仓库 URL |
| `--tag <TAG>` | Git 标签 |
| `--branch <BRANCH>` | Git 分支 |
| `--rev <REV>` | Git 修订版本 |
| `--path <PATH>` | 本地路径 |
### 示例
```bash
# 从 Git 使用标签添加
ccgo add spdlog --git https://github.com/gabime/spdlog.git --tag v1.12.0
# 从本地路径添加
ccgo add mylib --path ../mylib
```
---
## remove
从 CCGO.toml 移除依赖。
```bash
ccgo remove <DEPENDENCY>
```
### 参数
- `<DEPENDENCY>` - 依赖名称
### 示例
```bash
# 移除依赖
ccgo remove spdlog
```
---
## publish
发布库到注册表。
```bash
ccgo publish [OPTIONS] <PLATFORM>
```
### 参数
- `<PLATFORM>` - 要发布的平台:android、ios、macos、apple、ohos、conan、kmp
### 选项
| `--registry <TYPE>` | 注册表:local、official、private |
| `--url <URL>` | 自定义注册表 URL(仅 private)|
| `--skip-build` | 使用现有构建产物 |
| `--manager <MGR>` | 包管理器(apple):cocoapods、spm、all |
| `--push` | 推送 git 标签(仅 SPM)|
| `--remote-name <NAME>` | Git 远程名称(默认:origin)|
### 示例
```bash
# 发布 Android 到 Maven Local
ccgo publish android --registry local
# 发布到 Maven Central
ccgo publish android --registry official
# 发布 iOS 到 CocoaPods
ccgo publish apple --manager cocoapods
# 发布到 SPM 并推送 git
ccgo publish apple --manager spm --push
# 发布到私有 Maven
ccgo publish android --registry private --url https://maven.example.com
```
---
## check
检查平台要求是否满足。
```bash
ccgo check [OPTIONS] [PLATFORM]
```
### 参数
- `[PLATFORM]` - 要检查的平台(默认:全部)
### 选项
| `--verbose` | 显示详细的检查结果 |
### 示例
```bash
# 检查所有平台
ccgo check
# 检查特定平台
ccgo check android --verbose
```
---
## clean
清理构建产物。
```bash
ccgo clean [OPTIONS]
```
### 选项
| `--dry-run` | 显示将要删除的内容 |
| `-y, --yes` | 跳过确认提示 |
### 示例
```bash
# 预览将要删除的内容
ccgo clean --dry-run
# 无确认清理
ccgo clean -y
```
---
## tag
从 CCGO.toml 创建版本标签。
```bash
ccgo tag [OPTIONS] [VERSION]
```
### 参数
- `[VERSION]` - 版本标签(默认:从 CCGO.toml)
### 选项
| `-m, --message <MSG>` | 标签消息 |
| `--push` | 推送标签到远程 |
### 示例
```bash
# 从 CCGO.toml 版本创建标签
ccgo tag
# 创建自定义版本标签
ccgo tag v2.0.0 -m "Release 2.0.0"
# 创建并推送标签
ccgo tag --push
```
---
## package
打包源代码以供分发。
```bash
ccgo package [OPTIONS]
```
### 选项
| `--format <FMT>` | 包格式:tar.gz、zip(默认:tar.gz)|
| `--output <PATH>` | 输出路径 |
### 示例
```bash
# 创建源代码包
ccgo package
# 创建 ZIP 包
ccgo package --format zip
# 自定义输出路径
ccgo package --output /path/to/output
```
---
## run
构建并运行示例或二进制文件。
```bash
ccgo run [OPTIONS] <TARGET>
```
### 参数
- `<TARGET>` - 示例或二进制文件名称
### 选项
| `--example` | 作为示例运行(如果 TARGET 在 examples/ 中则为默认)|
| `--bin` | 作为二进制文件运行 |
| `--release` | 以发布模式构建 |
| `-- <ARGS>` | 传递给程序的参数 |
### 示例
```bash
# 运行示例
ccgo run my_example
# 使用参数运行
ccgo run my_example -- --arg1 value1
# 以发布模式运行
ccgo run my_example --release
```
---
## 环境变量
CCGO 支持以下环境变量:
| `CCGO_HOME` | CCGO 主目录(默认:~/.ccgo)|
| `ANDROID_HOME` | Android SDK 路径 |
| `ANDROID_NDK` | Android NDK 路径 |
| `OHOS_SDK_HOME` | OpenHarmony SDK 路径 |
| `CCGO_CMAKE_DIR` | 自定义 CMake 脚本目录 |
| `NO_COLOR` | 禁用彩色输出 |
---
## 退出代码
| 0 | 成功 |
| 1 | 一般错误 |
| 2 | 配置错误 |
| 3 | 构建错误 |
| 4 | 依赖错误 |
| 101 | 用户取消操作 |
---
## 获取帮助
```bash
# 获取任何命令的帮助
ccgo <command> --help
# 示例
ccgo build --help
ccgo publish --help
```
更多信息,请参阅:
- [CCGO.toml 参考](ccgo-toml.zh.md)
- [构建系统](../features/build-system.zh.md)
- [依赖管理](../features/dependency-management.zh.md)