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

📅 2026/7/27 5:58:49
别再手写 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 坑过的最惨的一次经历