别再手写 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 坑过的最惨的一次经历

相关新闻

配电网N-1扩展规划与Matlab实现技术解析

配电网N-1扩展规划与Matlab实现技术解析

1. 配电网N-1扩展规划的背景与价值现代配电网作为电力系统的末端环节,直接关系到供电可靠性和电能质量。随着分布式能源渗透率提高和负荷需求多样化,传统"一刀切"的规划方法已难以满足N-1安全准则要求。我在参与某工业园区配电网改造时深有体会…

2026/7/27 5:58:45 阅读更多 →
ERTC协议与WebRTC优化在智能家居音视频通信中的应用

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

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

2026/7/27 5:57:45 阅读更多 →
嵌入式硬件热设计实战:从TI AM1705热阻表到PCB散热优化

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

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

2026/7/27 5:57:45 阅读更多 →

最新新闻

浏览器翻译插件配置与优化全指南

浏览器翻译插件配置与优化全指南

1. 为什么我们需要浏览器翻译插件刚入行那会儿,我经常需要查阅大量英文技术文档。记得有次为了搞懂一个Kubernetes的配置问题,我不得不开着翻译网站和浏览器来回切换,不仅效率低下,还经常打断思路。直到发现了沉浸式翻译插件&…

2026/7/27 6:11:56 阅读更多 →
驾驶证识别 API 调用限制与用量边界深度解析

驾驶证识别 API 调用限制与用量边界深度解析

适用场景与业务价值 驾驶证识别 API 能够自动从图片中提取驾驶证的关键字段信息,包括证号、姓名、性别、国籍、住址、出生日期、准驾车型、有效期等 12 个字段。这使得它在以下场景中成为重要的基础设施: 网约车平台司机资质核验:司机上传驾驶…

2026/7/27 6:11:56 阅读更多 →
TMS320VC5505时钟与EMIF设计实战:从晶体选型到时序配置避坑指南

TMS320VC5505时钟与EMIF设计实战:从晶体选型到时序配置避坑指南

1. 项目概述与核心价值在嵌入式DSP系统开发中,时钟系统和外部存储器接口的设计,往往是决定项目成败的“暗礁”。很多工程师在初期会把精力集中在算法和功能实现上,却容易忽视这些底层硬件的“地基”工程。我见过不止一个项目,因为…

2026/7/27 6:11:56 阅读更多 →
语音搜索技术解析:从BERT模型到场景化应用

语音搜索技术解析:从BERT模型到场景化应用

1. 项目背景与现象解读最近在开发者圈子里有个挺有意思的现象:百度搜索Skill的下载量突然突破了3.6万次,这个数字在技能类产品中算是相当亮眼了。更让人意外的是,这个看似普通的搜索工具竟然和"龙虾时代"这个网络热词扯上了关系&am…

2026/7/27 6:11:56 阅读更多 →
OMAP 2420 DSP/BIOS Level 2中断配置与实战指南

OMAP 2420 DSP/BIOS Level 2中断配置与实战指南

1. 项目概述与核心价值在嵌入式DSP开发领域,尤其是面对像TI OMAP 2420这样的多核异构处理器时,中断管理的好坏直接决定了整个系统的实时性能和稳定性。很多开发者初次接触DSP/BIOS的中断系统时,往往只停留在“配置一个中断服务函数”的层面&a…

2026/7/27 6:11:56 阅读更多 →
MySQL 入门:库、表、行、主键是什么

MySQL 入门:库、表、行、主键是什么

🥰个人主页:会编程的土豆(欢迎来访) 💎作者简介:后端学习者 ❄️个人专栏:数据结构与算法,数据库,leetcode ✨那些你一个人走过的夜路,终将化作照亮未来的光 …

2026/7/27 6:10:55 阅读更多 →

日新闻

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:54 阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻