C++ CMake 模块化项目环境
- Issues - issues论坛
dmcpp-env
:铸造C++数字航母的基石与罗盘 🧭✨
C++ 性能卓越,控制强大 💪,但其开发环境的复杂、跨平台障碍及工具链整合难题,常让开发者头疼不已 🤯,难以专注核心业务。
主要痛点一览: 😩
- 环境配置繁琐:第三方库众多,版本管理与编译链接耗时易错 ⏳。
- 跨平台适配困难:操作系统、API及编译器差异导致代码维护成本高,行为难统一 🌍🚧。
- 工具链整合耗时:确保开发工具在团队和多设备间的一致性与流畅性,需专门投入 🛠️🧩。
dmcpp-env
的初心与解决之道: 🎯
为应对这些痛点,dmcpp-env
旨在提供一个更纯粹、高效、易掌控的模块化C++开发基座,让开发者聚焦业务逻辑与技术创新 💡。
dmcpp-env
这样做:
- 统一管理模块:预集成常用模块,简化依赖 📦✅。
- 标准构建流程:CMake加持,提升构建效率与一致性 ⚙️🚀。
- 优化跨平台体验:封装设计,减少平台差异困扰 💻🌍📱。
- 降低上手门槛:快速搭建环境,专注编码 🧑💻💨。
dmcpp-env
的存在,就是希望通过一个高度整合的开发环境,切实减轻C++开发者负担,助力更轻松、高效地构建稳定强大的应用程序 ✨🚀。
- CMake 3.21+
- C++17 编译器
- Git
git submodule update --init --recursive
mkdir build
cd build
cmake ..
make
- 将项目中 cmake 目录整个copy到你的项目中
- 在你的CMakeLists.txt中 project的下方加入以下代码
include(cmake/ModuleImport.cmake)
include(cmake/ModuleCompileOptions.cmake)
ModuleSetCompileOptions()
ModuleImportAll("thirdparty")
- 以dmstring 这个简单的项目为例, 在项目的根目录执行下面命令添加子模块, 如果有网络问题 拿到源码直接copy到thirdparty目录也是一样的.
git submodule add -f https://github.com/brinkqiang/dmstring ./thirdparty/dmstring
- 在你的项目中指定链接这个库, 如果你是非模块化的项目, 可以用target_link_libraries指定
cmake_minimum_required(VERSION 3.21)
PROJECT(dmstringtest)
LIST(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
INCLUDE(cmake/ModuleImport.cmake)
INCLUDE(cmake/ModuleCompileOptions.cmake)
ModuleSetCompileOptions()
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
set(CMAKE_STATIC_LIBRARY_PREFIX "")
set(CMAKE_SHARED_LIBRARY_PREFIX "")
ModuleImportAll("thirdparty")
if(PROJECT_IS_TOP_LEVEL)
ExeImport("test" "dmtest;dmstring")
endif()
-
日志和调试
- dmlog - 基于spdlog的日志库
- dmbacktrace - 获取调用堆栈
- dmdump - dump抓取
- dmwrk - http压测工具
- dmbreakpad - 跨平台crash
-
数据存储
- dmsqlitepp - SQLite数据库封装
- dmleveldb - kv数据库
- dmorm - mysql orm 简单
- dmredispp - redis client
- dmmongo-cxx-driver - mongo client
- dmotl - otl是一个C++数据库操作库,用于访问各种类型的数据库
- dmsqlpp11 - 领域特定语言 (EDSL) 的orm模板库
-
数据生成与处理
- dmformat - fmtlib
- dmexprtk - 数学表达式
- dmstrtk - 字符串操作
- dmcronpp - cron表达式解析
- dmcpplinq - linq 表达式
- dmmagicenum - 字符串 枚举转换库
- dmnameof - 获取变量、类型、函数、宏和枚举的名称
- dmscn - C++ scanf
- dmmatchitcpp - match表达式
- dmmathiucpp - 数学表达式 基于dmmatchitcpp
- dmlexy - 词法分析器
- dmstring - 常用字符串函数
- dmabseil-cpp - google基础库
-
模板引擎
- dminja - 模板引擎库
-
内存池与对象管理
- dmgperftools - google tcmalloc及相关工具链
- dmmimalloc - 微软 mimalloc
- dmrapidpool - 对象池, 算法来源于loki
-
网络与通信
-
任务与流程管理
- dmtimer - 跨平台timer
- dmcli11 - 单头文件命令行参数解析库
- dmsubprocess - 进程控制
- dmtaskflow - 任务工作流
- dmcrontask - 跨平台 cron表达式 任务工具
- dmtask - 简化版 C++17/20 task then
-
时间与日期
- dmcctz - 时间处理
- dmdatetime - 时间处理
-
系统与工具库
- dminfoware - 获取系统信息
- dmzipper - zip压缩
- dmsnappy - 压缩库
- dmvfspp - 虚拟文件系统
-
测试与模拟
-
数据格式
-
dmxml - xml
-
dminicpp - ini
-
dmcsv - csv
-
dmrapidcsv - csv
-
dmjson - nlohmann_json
-
dmjsoncpp - jsoncpp
-
dmrapidjson - rapidjson
-
dmxlsx - xlsx
-
dmyaml - yaml
-
dmtoml - toml
-
dmprotobuf - protobuf
-
dmflatbuffers - FlatBuffers
-
dmmarkdown - markdown转html
-
dmpropp - dmpropp 属性系统
-
-
跨语言开发
-
lua模块
-
python模块
-
数据结构与算法
- dmastar - A* 算法
- dmrecastnavigation - 导航网格
- dmbigint - uint256_t
- dmopenssl - openssl
-
唯一标识符生成
- dmsnowflake - 唯一ID生成 uint64_t 无依赖
- dmuuid - uuid生成
-
进度与状态
- dmindicators - 进度条
- dmtabulate - 表格制作
-
设计模式与架构
- dmdesignpattern - 设计模式
- dmfruit - 依赖注入
- dmentitascpp - 实体组件系统
- dmentt - 实体组件系统
- dmproxy - 代理模式
- dmeventpp - eventpp
-
开发环境搭建
- dmremote_development - vscode 远程开发环境搭建 包含docker环境设置
- dmvcpkg - vcpkg 环境设置
- vscode-ssh - vscode 离线 ssh远程调试环境搭建
- dmvscode-cpp - vscode 调试设置
-
工具与集成
- dmlibqrencode - 二维码生成
- chsrc-win - 命令行换源工具
- dmgit2ssh - Git协议转换工具
- dmcmake-tools - 通过分析当前工程目录下的源码信息, 自动化组织CMakeLists.txt及相关设置
- gitac - GitAutoCommit工具
-
代码生成与构建
- dmninja - 小型构建系统
-
底层与系统编程
-
Windows平台补丁
- dmfix_win_utf8 - 解决Windows平台中文编码乱码问题。
- dmfix_win_console - 解决Windows平台控制台颜色设置无效问题。
-
dmcpp-port 伟大航路
- dmcpp-port - 跨语言解决方案