# btoy **Repository Path**: dankinder/btoy ## Basic Information - **Project Name**: btoy - **Description**: 一个简短的手写编译器练习 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-11-24 - **Last Updated**: 2025-11-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Btoy Project 一个使用现代C++20和Clang编译器构建的项目。 ## 项目概述 Btoy是一个C++项目,采用模块化设计,包含核心库、执行模块和测试套件。 ## 项目结构 ``` btoy/ ├── CMakeLists.txt # 根CMake配置 ├── libcore/ # 核心库模块 ├── execution/ # 执行模块 ├── tests/ # 测试套件 ├── bin/ # 构建输出目录(可执行文件) └── libs/ # 构建输出目录(库文件) ``` ## 构建要求 ### 必需工具 - **CMake**: 版本 3.31 或更高 - **C++编译器**: Clang (强制使用) - **C++标准**: C++20 ### 推荐工具 - Ninja (推荐作为生成器) - clangd (用于代码智能提示) ## 构建步骤 ### 1. 克隆项目 ```bash git clone cd btoy ``` ### 2. 配置项目 ```bash # 使用Ninja (推荐) mkdir build && cd build cmake -G Ninja .. # 或者使用Makefile mkdir build && cd build cmake .. ``` ### 3. 编译项目 ```bash # 如果使用Ninja ninja # 如果使用Makefile make ``` ### 4. 运行测试 ```bash # 在build目录中 ctest # 或直接运行测试可执行文件 ./bin/tests ``` ## 构建输出 - **可执行文件**: `build/bin/` - **库文件**: `build/libs/` - **编译命令数据库**: `build/compile_commands.json` (用于clangd) ## 测试用例子 ```cpp var a = 1; print a; ``` ```cpp var b = 3; { var b = 2; var c = 4; print b + c; } print b; ``` ```cpp var a = "黄灯 "; var b = "你好"; var c = a + b; print c; print "黄灯你还好吗"; ``` ## 开发环境配置 ### 使用clangd 项目已生成 `compile_commands.json`,可直接用于clangd的代码补全和静态分析。 ## 主要特性 - 🔧 **强制使用Clang编译器** - 确保一致的构建环境 - 📚 **C++20标准** - 使用现代C++特性 - 🧪 **完整的测试框架** - 使用CMake内置测试支持 - 📁 **模块化设计** - 清晰的代码组织结构 - 🚀 **高效的构建系统** - 支持并行编译 ## 开发说明 ### 添加新模块 1. 创建新的子目录 2. 在该目录中添加 `CMakeLists.txt` 3. 在根 `CMakeLists.txt` 中添加 `add_subdirectory(新模块名)` ### 代码风格 - 遵循现代C++最佳实践 - 使用C++20特性 - 保持代码可读性和一致性 ## 故障排除 ### 常见问题 1. **Clang编译器未找到** ```bash sudo apt install clang # Ubuntu/Debian brew install llvm # macOS ``` 2. **CMake版本过低** - 从 [CMake官网](https://cmake.org/download/) 下载最新版本 3. **构建失败** - 清理构建目录: `rm -rf build` - 重新配置: `cmake -G Ninja ..` - 重新编译: `ninja`