news 2026/7/27 5:58:44

别再手写 CMakeLists.txt 了!我写个开源神器让我彻底解放了

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再手写 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++ 标准 C++17│ │ 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 -march=native性能核心,往死里优化
debug_helper.cpp-O0 -g3 -DDEBUG调试工具,不能优化
avx_module.cpp-mavx2 -mfma要用 AVX2 指令集
legacy_code.c-std=c99老代码,用 C99 编译

在 EasyCMake 里怎么做?

  1. 填写源文件列表:main.cpp, debug_helper.cpp, avx_module.cpp
  2. 点击「单文件编译选项」按钮
  3. 每个文件弹出一个输入框,爱写什么写什么

生成的 CMake:

# --- main_app 单文件特殊编译选项 --- set_source_files_properties(main.cpp PROPERTIES COMPILE_FLAGS "-O3 -march=native") 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,有测试用例,还想对其中一个加密文件做特殊优化。

第一步:打开 EasyCMake

pipinstallflask jinja2 python3 easycmake.py

浏览器自动打开。

第二步:填项目信息

项目名my_server,版本1.2.0,C++20,编译模式 Release。

第三步:加可执行文件

填名称my_server,源文件main.cpp, config.cpp, crypto_worker.cpp

往下面的「包含目录」填include, generated,「宏定义」填APP_VERSION="1.2.0", ENABLE_TLS

第四步:单文件特殊优化

点击**「单文件编译选项」**,面板展开:

  • crypto_worker.cpp→ 输入-O3 -march=native -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-fsanitize=address下拉选择
LTO-flto开关
导出编译命令CMAKE_EXPORT_COMPILE_COMMANDS开关(默认开启)
安装规则install(TARGETS ...)开关 + 填目录
测试enable_testing()add_test()开关 + 添加测试用例

全不全?你还想要什么功能?来提 issue,我加。


🎨 说点设计上的小心思

这个工具有几个我认为做得还不错的地方:

深色主题,VS Code 风格

背景 #1e1e1e,卡片 #252526,代码预览 #1a1a2e

作为一个开发者,每天看亮色背景对我眼睛是种酷刑。所以默认就是暗色,而且配色调了很久,看着很舒服。

实时预览,所见即所得

右侧的预览区在你每次「生成」或「预览」时都会更新。不用切出去看文件。填完表,右边就是完整的 CMakeLists.txt,可以直接复制。

一键复制

预览区的右上角有一个复制按钮,点一下就把内容复制到剪贴板了。不用选中、Ctrl+C、担心选漏了。

配置持久化

配置保存在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 或有新想法,欢迎提交

📌 求点赞

如果这篇文章对你有帮助:

  1. 开源项目点个 Star— 让更多被 CMake 折磨的人看到这个项目
  2. 📢转发给身边的 C++ 开发者— 他们需要这个
  3. 💬评论区留言— 说说你被 CMake 坑过的最惨的一次经历
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/27 5:57:42

Spring Cloud:分布式系统的“粘合剂”(四)

专栏:Spring Cloud 个人主页:手握风云 目录 一、负载均衡 1.1. 问题 1.2. 定义 1.3. 分类 二、Spring Cloud LoadBalancer 2.1. 快速上手 2.2. 负载均衡策略 2.3. 底层原理 三、多机部署 3.1. 前置准备 3.2. Maven 项目打包 3.3. 服务器 Jar…

作者头像 李华
网站建设 2026/7/27 5:56:39

可逆数据结构在DevOps部署回滚中的实践

1. 为什么需要无损回滚机制? 在持续交付和DevOps实践中,配置变更的回滚能力一直是系统可靠性的关键指标。传统回滚方案通常采用快照备份或版本控制的方式,但这些方法存在两个致命缺陷: 数据丢失风险 :快照备份通常是…

作者头像 李华
网站建设 2026/7/27 5:52:31

少样本新类发现(FSNCD)技术解析与应用实践

1. 少样本新类发现:从理论到实践的全面解析在机器学习领域,我们常常面临一个根本性挑战:如何让模型不仅能识别已知类别,还能自主发现全新的类别?这个问题在现实场景中尤为重要——想象一下,一个监控系统需要…

作者头像 李华
网站建设 2026/7/27 5:50:51

PHP开发中XSS攻击的防御实战:从原理到多层次安全方案

1. 项目概述:为什么XSS是PHP开发者的必修课?干了这么多年PHP开发,我敢说,XSS(跨站脚本攻击)绝对是每个后端程序员绕不开的“老朋友”。你可能觉得,现在框架这么成熟,谁还会犯这种低级…

作者头像 李华
网站建设 2026/7/27 5:50:37

《独家RT-DETR多模态改进专栏目录 》全网独家创新,多模态融合改进教程,包含早期融合、中期融合、后期融合、损失函数改进、二次创新模块、独家创新等几百种创新点改进,答疑群提供完整项目,永久更新中

🔥《全新RT-DETR多模态创新改进专栏》🔥 “进入RT-DETR多模态项目答疑群!项目永久更新与维护、答疑!” 来自精选多模态检测相关顶会顶刊论文、更容易涨点发论文! 多模态改进,只要故事编好,很…

作者头像 李华
网站建设 2026/7/27 5:49:43

OpenCV在vs studio中的配置

博主只是初入此行的蒻蒟,这篇文章内容不一定正确(一些限定名词也不一定说的对),但一定解决了博主在初学时的问题,后续有变动还会继续更新,希望能帮到大家 目录 第一种方式CMake配置(推荐&…

作者头像 李华