
























这是一个创建于 706 天前的主题,其中的信息可能已经有所发展或是发生改变。
1 augustheart 2024 年 7 月 8 日看了一下,分享精神可嘉,不过聊胜于无吧,用处很狭窄。 |
2 w568w 2024 年 7 月 8 日要我说 Makefile 这种东西早就应该扔进历史垃圾桶了。 多亏了 Autotools 家族: 1. 直到今天 C/C++ 项目的构建和编译还是充满了不在文档中的命令行参数、不知名的环境变量、随心所欲的模块管理和依赖地狱; CMake is better, and Meson is even better. 如果你需要一个命令行运行器,你应该用 just 或 ninja 。 |
3 zhng920823 2024 年 7 月 8 日@w568w #2 所以不用 Autotools 那套东西, 直接用 Makefile, 我这个 Makefile 也可以同时用在 windows 上的 mingw |
4 zhng920823 2024 年 7 月 8 日@augustheart #1 这个是从我自己用的项目里抽出来的, 可以一个工程里多个可执行文件, 久而久之这个工程里的东西就越来越多越来越杂, 依赖关系越来复杂, 编译越来越慢. 因为每一个 EXE 依赖所有的 OBJ. |
5 w568w 2024 年 7 月 8 日@zhng920823 是啊,我知道可以用,我自己也不是没干过这事。后来换到 CMake 、Meson 才发现:干,这些事原来根本不用自己操心维护。Makefile 里判断平台大多是白忙活! 别人写了十几年的轮子了,兼容性自然远高于我们手写的几行 Makefile 。与其遇到一个不兼容问题修复一个,不如直接用现代化构建工具。 另外,只有第 3 个缺点和 autotools 有关啊,1 、2 、4 点 Makefile 都有。 |
6 zhng920823 2024 年 7 月 8 日@w568w #5 一直不太喜欢 cmake 等这种"大"公司推行的东西 |
7 w568w 2024 年 7 月 8 日@zhng920823 #6 CMake 被大公司推行的好处是能统一。另外,Meson 作为纯社区项目,其实没有被大公司裹挟吧? 我也喜欢 xmake ,还贡献过代码。xmake 的问题可能是包装得太深了,想要做一些自定义很困难,以及没有一个 CMake 级别的 behavior reference 文档。 |
8 zhng920823 2024 年 7 月 8 日@w568w #7 我也觉得 xmake 搞的越来越强大了, 早期简单的版本就够用. |
9 ipwx 2024 年 7 月 8 日@zhng920823 我曾经也排斥用别人包了一层又一层的东西,觉得什么东西都自己写底层很舒服。 直到我毕业了,从兴趣驱动到工资驱动…… |
10 augustheart 2024 年 7 月 8 日@zhng920823 xmake 是愿景太大了,它想覆盖的每个场景都会有很多具体问题,需要各种针对修正。比如我个人的场合比较非主流,就是 msys2 那套在 win 下面编译,前后就提了好些 issue 。(其实最严重的问题是文档失修) |
14 GeruzoniAnsasu 2024 年 7 月 8 日10 个 lib source, 10 个单测 source 我需要写 _ 个 makefile, 每个 makefile 里复制粘贴 _ 行 source 新增 1 个 lib source 的时候 我需要修改 _ 个文件中的 _ 行? |
15 zhng920823 2024 年 7 月 8 日@GeruzoniAnsasu #14 不过我还有一套和 IDE 结合的工具, 能把这些工作自动化. 这个 Makefile 是单独提取出来展示给大家的. |
16 cnbatch 2024 年 7 月 8 日虽然我也不那么喜欢 cmake ,但更不喜欢 GNU Makefile ,因为我需要兼顾 BSD 系统( BSD Makefile 稍有不同),所以最后还是要用 cmake 兜底 |
17 proxytoworld 2024 年 7 月 8 日我用 xmake 尝试引入 cmake ,但编译错误,搞了半天,太难了,最后还是用了 cmake 的 hunter |
18 424778940 2024 年 7 月 8 日makefile 早就该被淘汰了, 又是写他都不如写个 shell 脚本方便, 或者说这东西就是个特别一点的 shell 脚本 我现在一律使用 cmake, 虽说也没有特别先进, 有些地方还是有"无法指定这个操作到底 config 还是 build 时候执行"的问题, 但配合任何 shell 脚本基本都能解决 90%以上的场景需求了 楼主你这个 makefile, 用 cmake 应该不到一半的行数就能写完 |
19 zhng920823 2024 年 7 月 8 日@proxytoworld #17 可惜 xmake 不能直接支持 cmake @424778940 #18 Makefile 肯定比 shell 方便的, 这点不用质疑, 毕竟是专门干这个的. |
20 augustheart 2024 年 7 月 8 日@proxytoworld 通过 xmake 调用 cmake ,其实只是把传给 cmake 的参数给复制过去就好了,xmake 使用 package.tools.cmake ,等价于通过命令行调用 cmake 。需要注意的只有环境问题( xmake 的执行环境和 cmake 的执行环境并不一定是一样的)。 |
22 augustheart 2024 年 7 月 8 日@zhng920823 哦,那是自然的。想替代 cmake 就得解析 cmake 那一大坨东西,这个工作量比 xmake 本身还大 |
23 zhng920823 2024 年 7 月 8 日@augustheart #22 也没必要支持 cmake 的全部特性, 一些项目的 CMakelists.txt 看着非常简单的, 只要能支持这种的编译就行. 那些导出各种工程的功能很少用的 |
24 yolee599 2024 年 7 月 9 日 via Android我用的 cmake ,就因为 cmake 大家都用,生态比较好,比如 esp-idf ,lvgl ,mbedtls ,lwip …… 都在用 |
26 hitmanx 2024 年 7 月 9 日我工作中遇到的项目 cmake 通常都是比较复杂的,各种 custom command 、custom target 乱飞,调用各种工具、python 等等生成中间文件,再由中间文件生成其它的中间文件等等,再加上 cmake 的字符串操作、对文件系统的操作,以及各种平台*feature list 的排列组合等等……需要理解大量业务逻辑才能明白这个工作流程。 相比之下,新增文件时要更新一个文件列表,或者指定一个库的依赖等等,反而是其中最简单的环节,并不需要费太多的脑细胞。 在这种复杂的系统里,用的 build 的语言是否足够“expressive”,让读的人能轻易明白你想干什么变得更关键了。另外就是效率,现在每改一行 cmake ,重新 config 一次要好几分钟…… |
27 zhng920823 2024 年 7 月 9 日@hitmanx #26 一般太复杂的东西, 我会选择用 shell 或其它语言的脚本进行额外处理, 而不是融合进 build 系统里面. |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。