- 作者:
- 分类:项目&制作->开源项目
- 阅读:3036
- 点赞:15
- 版权:CC BY-SA 4.0
- 创建:2020-05-02
- 更新:2022-06-06
用 Cmake+Kconfig 组织的 C/C++ 模块化项目代码框架
版权声明:本文为 neucrack 的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接(持续更新):https://neucrack.com/p/276
原文链接(持续更新):https://neucrack.com/p/276
用 Cmake+Kconfig 组织的 C/C++ 模块化项目代码框架, 主要是为了方便一个代码的构建,以及代码的模块化结构,并使用Kconfig来使工程可配置可选择性地裁剪模块
如果喜欢, 点一下 star 加入收藏~
欢迎提交pr和issue
源码
代码托管在 github/Neutree/c_cpp_project_framework
方案
结合 CMake + KConfig + Python 做一个使用起来简单的 C/C++ 源码项目框架:
- 使用 Python 脚本作为入口,方便开发者执行一个命令比如
python project.py build
就能执行编译; - 使用 Kconfig 实现功能模块可选方便增删功能模块;
- 使用 CMake 作为基础编译工具,加上给组件提供简单好用的模板,开发者不需要学习 CMake 也能使用
特点:
- 语法简单, 无需Makefile或者CMake知识, 只需基于模板修改变量的值即可非常简单地用起来了
- 基于组件(component)概念的项目结构, 方便搭建层次结构清晰的项目架构
- 组件之间调用只需要一个语句指定依赖即可(比如list(APPEND ADD_REQUIREMENTS component1)), 无需设置多余变量比如INCLUDE 路径即可在源码中调用依赖的组件的内容, 包括依赖系统安装的库
- 使用 Kconfig 使项目组件和代码可裁剪配置, 方便项目满足不同的需求
- 方便地引入静态库(.a) 和 动态库(.so) ( 比如list(APPEND ADD_STATIC_LIB “lib/libtest.a”))
- 方便地生成静态库(.a) 和 动态库(.so) (默认生成静态库, 需要组件生成动态库,则使用register_component(DYNAMIC)注册模块即可)
- 使用 Python 脚本作为辅助, 可方便地添加命令和工具, 编译只需要执行简单的命令即可(如python project.py build python project.py menuconfig)
- 方便地作为 SDK, 工程实例可以直接放在SDK目录下, 也可以单独放在磁盘任何地方, 只需要设置环境变量MY_SDK_PATH即可
- 交叉编译友好, 很好地作为嵌入式设备 SDK
- 提供简单的编译脚本和命令
- 支持编译成
WASM
(Web Assembly)(在网页端运行,或在其平台运行,或者被其它语言调用)
效果图: (这是演示了如何通过界面配置工程模块,并且使用简单的命令构建生成固件)