# Simple Cpp Library **Repository Path**: cb604bl/simple-cpp-library ## Basic Information - **Project Name**: Simple Cpp Library - **Description**: 一个C++的类标准库,极简实现,追求跨平台性和跨编译器性 - **Primary Language**: C/C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2025-12-03 - **Last Updated**: 2026-02-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Simple Cpp Library ![logo](logo.png) # 📖概要   Simple Cpp Library(在下文我们简称为**SCL**)是一个模仿C++标准库的**类标准库**,追求极简实现,跨平台性以及跨编译器性,有关什么是**类标准库**请看下文   我们希望SCL库能够在教育、学习交流、嵌入式开发、资源受限的设备等领域/环境上发挥作用——当然,它或许只能成为我们的一个玩具项目,但这不是问题,重要的是我们开发了它,这就够了 # 🤔何为类标准库?   这或许是一个在本项目中被新创造出来的术语,下面给出它的简单定义   类标准库(Standard-Like Library, SLL)是一个我们为本项目定义的概念,它指的是:
- 核心定位:
  一个自主实现的代码库,它系统地模仿C++标准库的设计哲学与接口风格,旨在作为标准库的替代实现或在特殊场景下使用
- 生态位:
  它介于"普通第三方库"与"官方标准库实现"(如libc++, libstdc++)之间,它比前者更"标准",比后者更"自由"
- 关键特性:
  有意为之的偏离: 它可以为了优化、兼容性或实验性,不严格遵循标准规范,保留废弃接口或引入新特性
  场景驱动: 常用于学习、移植、受限环境(如嵌入式)或特定的性能调优 # ⚙️安装本库   在写代码之前,请保证你使用的是Unix/Linux系统,并确认你安装了如下工具: ``` cmake make git clang/gcc ```   使用如下命令克隆本仓库: ```sh git clone git@gitee.com:cb604bl/simple-cpp-library.git ```   克隆完成后,进入仓库文件夹 ```sh cd simple-cpp-library ```   运行安装脚本来安装库到你的设备中 ```sh chmod 755 ./install.sh ./install.sh ```   脚本会询问你 ``` Do you want to continue?[Y/n]: ```   如果不输入Y,安装将会终止,不会更改系统文件
  输入Y后,当提示了 ``` [Process]: Simple Cpp Library installation completed ```   那么恭喜你,SCL库已经安装完成了🎉! # 🚀快速上手   想在你的C\++项目中使用SCL库十分简单,在此之前你需要保证自己的C++标准在17及以上
  随后,你只需要在你的CMakeLists.txt里面写上: ```cmake if(DEFINED ENV{PREFIX}) set(SCL_INCLUDE_DIR "$ENV{PREFIX}/local/include/scl") set(SCL_LIBRARY "$ENV{PREFIX}/local/lib/libscl.a") else() set(SCL_INCLUDE_DIR "/usr/local/include/scl") set(SCL_LIBRARY "/usr/local/lib/libscl.a") endif() ```   接着你就可以方便的配置目标的包含目录和链接库了! ```cmake target_include_directories([target] [PUBLIC|PRIVATE|INTERFACE] "${SCL_INCLUDE_DIR}") target_link_libraries([target] [PUBLIC|PRIVATE|INTERFACE] "${SCL_LIBRARY}") ```   示例: ```cmake cmake_minimum_required(VERSION 3.15) project( SCL_TEST LANGUAGES CXX C ) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_C_STANDARD 17) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS OFF) add_executable(test "main.cpp") if(DEFINED ENV{PREFIX}) set(SCL_INCLUDE_DIR "$ENV{PREFIX}/local/include/scl") set(SCL_LIBRARY "$ENV{PREFIX}/local/lib/libscl.a") else() set(SCL_INCLUDE_DIR "/usr/local/include/scl") set(SCL_LIBRARY "/usr/local/lib/libscl.a") endif() target_include_directories(test PUBLIC "${SCL_INCLUDE_DIR}") target_link_libraries(test PUBLIC "${SCL_LIBRARY}") ```   在main.cpp中 ```cpp #include #include #include int main() { //scl中的独特接口, 不需要::value scl::printf("%d\n", scl::is_class); //无异常的new int* i = new(scl::nothrow) int; //placement-new new(i) int(23); scl::printf("%d\n", *i); delete i; } ```   编译并运行它,你可以看见如下输出: ``` 0 23 ``` # 🤝贡献与合作 [待编写]