别再手写 CMakeLists.txt 了!我写个开源神器让我彻底解放了
别再手写 CMakeLists.txt 了这个开源神器让我彻底解放了Gitee 地址https://gitee.com/cjuer512/easycmake一、楔子一个 C 开发者的日常崩溃先问大家一个问题——当你心血来潮的想写个C/C项目高高兴兴写完文件该配置构建了是否看着CMake就头痛奇葩的语法逆天的关键词用deepseek折磨。费尽千辛万苦从别的地方复制粘贴个CMake改了改然后一定经历过以下场景场景一add_executable(my_app main.cpp utils.cpp network.cpp database.cpp config.cpp ... 还有二十个文件)然后你发现拼错了一个文件名。CMake 给你一个看不懂的错误。你盯着屏幕开始怀疑人生。场景二你只是想给自己的项目加几个编译选项-Wall 怎么写的来着是add_compile_options还是set(CMAKE_CXX_FLAGS不对应该是target_compile_options…… 哎算了全写上吧反正也没事。场景三你有一个文件需要特殊优化其他文件正常编译。你打开了 CMake 文档搜索了半小时终于知道有set_source_files_properties这个东西。然后花十分钟搞懂了语法。场景四你换了个项目。之前的 CMake 配置全忘了。重新从头写。——请问这浪费时间吗我知道你要说什么“CMake 是行业标准你逃不掉的。”对逃不掉。但我们可以让它变得不那么恶心。于是我花了点时间写了一个小工具—— EasyCMake可视化 CMake 配置工具先看效果┌──────────────────────────────────────────────────────────┐ │ ⚙️ easycmake — CMake 可视化配置工具 │ │ ┌──────────────┐ ┌──────────────────────────────────┐ │ │ │ 项目基本信息 │ │ CMakeLists.txt 预览 │ │ │ │ 项目名称 xxx │ │ # │ │ │ │ 版本号 1.0.0 │ │ cmake_minimum_required(...) │ │ │ │ C 标准 C17│ │ project(xxx VERSION 1.0.0) │ │ │ ├──────────────┤ │ add_executable(xxx │ │ │ │ 可执行文件配置 │ │ main.cpp │ │ │ │ → main_app │ │ ) │ │ │ │ main.cpp │ │ target_include_directories(...) │ │ │ │ utils.cpp │ │ ... │ │ │ ├──────────────┤ │ ... │ │ │ │ 编译/链接选项 │ │ ... │ │ │ │ ☑ -Wall ☑ -O2│ └──────────────────────────────────┘ │ │ └──────────────┘ │ └──────────────────────────────────────────────────────────┘左边填表右边实时预览。填完点一下「生成」CMakeLists.txt 就到手了。简单到令人发指。但是我做这个工具的时候想的不仅仅是做个填表生成器。我想要的是—— 解决真实痛点痛点一记不住命令 → 可视化表单target_include_directories 的语法是什么来着 第二个参数是 PUBLIC 还是 PRIVATE find_package 的版本范围是用两个参数还是三个EasyCMake 把这些全部变成了表单和选项。选就完事了。痛点二要改源文件就要改 CMake → 动态添加新加了一个crypto_worker.cpp在界面上敲个逗号加个文件名重新生成。完事。痛点三不同文件需要不同编译参数 → 单文件编译选项杀手锏这才是这个工具最值钱的功能。真实项目中你经常需要文件需求原因main.cpp-O3 -marchnative性能核心往死里优化debug_helper.cpp-O0 -g3 -DDEBUG调试工具不能优化avx_module.cpp-mavx2 -mfma要用 AVX2 指令集legacy_code.c-stdc99老代码用 C99 编译在 EasyCMake 里怎么做填写源文件列表main.cpp, debug_helper.cpp, avx_module.cpp点击「单文件编译选项」按钮每个文件弹出一个输入框爱写什么写什么生成的 CMake# --- main_app 单文件特殊编译选项 --- set_source_files_properties(main.cpp PROPERTIES COMPILE_FLAGS -O3 -marchnative) set_source_files_properties(debug_helper.cpp PROPERTIES COMPILE_FLAGS -O0 -g3 -DDEBUG) set_source_files_properties(avx_module.cpp PROPERTIES COMPILE_FLAGS -mavx2 -mfma)精确到每个文件。不再需要把整个项目的优化级别设成 -O0 来迁就一个调试文件。说真的光这个功能就值得你 star 一下这个项目。痛点四配置不能复用 → 保存 / 加载项目的 CMake 配置可以保存为 JSON 文件。下次打开自动加载。换个项目再配一套。换个同事来维护把 JSON 丢给他。 实际操作30 秒生成一个完整项目来我手把手带你走一遍。假设我们要写一个叫my_server的服务端程序用了 OpenSSL 和 Zlib有测试用例还想对其中一个加密文件做特殊优化。第一步打开 EasyCMakepipinstallflask jinja2 python3 easycmake.py浏览器自动打开。第二步填项目信息项目名my_server版本1.2.0C20编译模式 Release。第三步加可执行文件填名称my_server源文件main.cpp, config.cpp, crypto_worker.cpp。往下面的「包含目录」填include, generated「宏定义」填APP_VERSION1.2.0, ENABLE_TLS。第四步单文件特殊优化点击**「单文件编译选项」**面板展开crypto_worker.cpp→ 输入-O3 -marchnative -maes其他文件不动第五步加依赖、开测试添加 OpenSSL 依赖打开测试开关加两个测试用例。第六步点击「生成」✅ 已生成 CMakeLists.txt保存至/xxx/CMakeLists.txt右边预览区已经显示完整的 CMake 内容了。整个过程不超过 30 秒。 都支持哪些 CMake 功能我把最常用的 CMake 命令全包进去了一张表看清楚功能对应 CMake 命令EasyCMake 操作项目信息project()cmake_minimum_required()填表C 标准CMAKE_CXX_STANDARD下拉选择 11/14/17/20/23构建类型CMAKE_BUILD_TYPE下拉选择 Debug/Release可执行文件add_executable()添加一行静态/动态库add_library()添加一行 选择类型包含目录target_include_directories()include_directories()填逗号分隔的路径宏定义target_compile_definitions()填逗号分隔的宏链接库target_link_libraries()填库名 单文件选项set_source_files_properties()展开面板逐文件填写第三方依赖find_package()填包名 版本范围子目录add_subdirectory()填逗号分隔的路径编译选项add_compile_options()开关 下拉 自定义输入链接选项add_link_options()自定义输入Sanitizer-fsanitizeaddress等下拉选择LTO-flto开关导出编译命令CMAKE_EXPORT_COMPILE_COMMANDS开关默认开启安装规则install(TARGETS ...)开关 填目录测试enable_testing()add_test()开关 添加测试用例全不全你还想要什么功能来提 issue我加。 说点设计上的小心思这个工具有几个我认为做得还不错的地方深色主题VS Code 风格背景 #1e1e1e卡片 #252526代码预览 #1a1a2e作为一个开发者每天看亮色背景对我眼睛是种酷刑。所以默认就是暗色而且配色调了很久看着很舒服。实时预览所见即所得右侧的预览区在你每次「生成」或「预览」时都会更新。不用切出去看文件。填完表右边就是完整的 CMakeLists.txt可以直接复制。一键复制预览区的右上角有一个复制按钮点一下就把内容复制到剪贴板了。不用选中、CtrlC、担心选漏了。配置持久化配置保存在easycmake_config.json。下次启动自动加载。关掉浏览器再打开一切还在。 技术栈后端Python Flask轻量、稳定模板Jinja2业界最流行的 Python 模板引擎前端Vanilla JS零依赖启动即用样式Bootstrap 5 自定义暗色主题生成原理JSON 配置 → Jinja2 渲染 → CMakeLists.txt整个项目只有一个入口、五个核心文件、一千多行代码。小而美。 写在最后我做这个工具的初衷很简单——我讨厌写 CMakeLists.txt。不是我一个人讨厌我身边的所有 C 开发者都讨厌。但它是行业标准逃不掉。那既然逃不掉就想办法让它别那么痛苦。EasyCMake 不会帮你写业务代码不会帮你 debug不会帮你优化算法。但它能帮你在构建配置这件事上省下 90% 的时间。这 90% 的时间你可以用来做什么写更好的代码。读更多的书。陪家人吃顿饭。或者——来 Gitee 点个 star 也行 相关链接Gitee 地址https://gitee.com/cjuer512/easycmake安装方式pip install flask jinja2 python3 easycmake.py提交 Issue发现 Bug 或有新想法欢迎提交 求点赞如果这篇文章对你有帮助⭐开源项目点个 Star— 让更多被 CMake 折磨的人看到这个项目转发给身边的 C 开发者— 他们需要这个评论区留言— 说说你被 CMake 坑过的最惨的一次经历

相关新闻

ERTC协议与WebRTC优化在智能家居音视频通信中的应用

ERTC协议与WebRTC优化在智能家居音视频通信中的应用

1. ERTC协议与萤石开放平台音视频架构解析ERTC(Ezviz Real-Time Communication)是萤石开放平台基于WebRTC技术栈深度优化的实时音视频通信协议。作为智能家居视频云服务的核心传输层方案,它主要解决设备端与客户端之间的低延迟交互问题。以萤…

2026/10/19 21:44:19 阅读更多 →
嵌入式硬件热设计实战:从TI AM1705热阻表到PCB散热优化

嵌入式硬件热设计实战:从TI AM1705热阻表到PCB散热优化

1. 项目概述:从一份数据手册开始的热设计实战做嵌入式硬件设计,尤其是用到TI这类高性能处理器的项目,最怕的不是代码调不通,而是板子跑着跑着莫名其妙重启,或者性能突然下降。很多时候,问题的根源不在软件&…

2026/10/20 19:04:30 阅读更多 →
DDR3 PCB设计实战:从信号完整性到稳定布局的工程指南

DDR3 PCB设计实战:从信号完整性到稳定布局的工程指南

1. 项目概述:为什么DDR3布局布线是高速设计的“硬骨头”干了这么多年硬件设计,每次项目评审会上,只要提到DDR3的PCB设计,会议室里的气氛总会凝重几分。这玩意儿不像电源,纹波差点还能凑合用;也不像低速接口…

2026/10/20 14:40:23 阅读更多 →

最新新闻

基于改进鲸鱼算法的六自由度机械臂3-5-3多项式时间最优轨迹规划

基于改进鲸鱼算法的六自由度机械臂3-5-3多项式时间最优轨迹规划

机械臂的轨迹规划,说白了就是在“怎么走”和“走多快”之间做交易。生产线节拍压得紧,机械臂末端就得跑得更快,但速度一上来,关节的冲击和振动也跟着上来,时间久了螺丝都能给你抖松。我做过的一个很典型的项目——基于…

2026/10/20 19:04:03 阅读更多 →
SpringBoot+Vue民宿管理系统源码实战:从跑通到吃透

SpringBoot+Vue民宿管理系统源码实战:从跑通到吃透

这种基于SpringBootVue的民宿管理系统源码项目,这几年一直特别多,到2025年依然有不少人拿着类似标题的代码来找我帮忙跑通、改需求。原因不复杂:民宿短租业务贴近实际、模块边界清晰、技术栈覆盖面够广,作为课程设计、毕业设计或者…

2026/10/20 19:04:03 阅读更多 →
从传统CSS到Tailwind CSS:原子化开发实战心得与避坑指南

从传统CSS到Tailwind CSS:原子化开发实战心得与避坑指南

如果过去两年你一直在写前端,很难没听过 Tailwind CSS 这个名字。我第一次在真实项目里全面用它的时候,周围不少同事的第一反应是:这不就是把内联样式换了个写法?但真正用过大半年、把老项目也一个个迁过来之后,我发现…

2026/10/20 19:04:02 阅读更多 →
基于Django的图书推荐系统:标签画像与信息流反馈闭环实战

基于Django的图书推荐系统:标签画像与信息流反馈闭环实战

1. 为什么图书馆的找书体验,天然就是反人类的1.1 图书馆不是为"找书"设计的,它只是为"存书"设计的先说一个反直觉的观察:图书馆的物理空间和排架规则,本质上是为了"让管理员能精准定位一本书放在哪里&qu…

2026/10/20 19:04:02 阅读更多 →
UART红外接近感应免开发方案:一键学习与集成实战指南

UART红外接近感应免开发方案:一键学习与集成实战指南

做硬件集成的人应该都有这种体会:需求方丢过来一句“加个感应功能”,具体怎么实现、要改多少代码、会不会后期误触发,全都得自己扛。我最近给一个展示柜项目做改版,要求是“有人靠近柜门时,灯带和屏幕依次亮起来”。一…

2026/10/20 19:04:02 阅读更多 →
Playwright实战指南:从Selenium到下一代Web自动化

Playwright实战指南:从Selenium到下一代Web自动化

做Web自动化这些年,身边越来越多的人开始把Playwright当作首选,尤其是接触过旧的Selenium体系之后,再回头看Playwright,确实会有一句“原来早就该这样了”的感叹。写这篇文章的原因很简单,Playwright被称作“下一代Web…

2026/10/20 19:03:02 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →