
Makefile 可以做到如下简洁, 实际用时只要修改 EXE 和 OBJ 的列表值, 无需关心其它的东西
EXE=\ exe1\ a/exe2\ a/exe3\ OBJ=\ mod1\ liba/mod2\ liba/mod3\ include inc.mak 工程源码 https://github.com/webd90kb/webd/tree/master/codes/c_project_template
1 augustheart 2024-07-08 12:28:18 +08:00 看了一下,分享精神可嘉,不过聊胜于无吧,用处很狭窄。 实际上照本宣科写个 makefile ,目录分好。然后一个通配符也差不多效果了,最后每次就拷贝这 makefile ,修改一下输出目标名。 |
2 w568w 2024-07-08 12:29:08 +08:00 要我说 Makefile 这种东西早就应该扔进历史垃圾桶了。 多亏了 Autotools 家族: 1. 直到今天 C/C++ 项目的构建和编译还是充满了不在文档中的命令行参数、不知名的环境变量、随心所欲的模块管理和依赖地狱; 2. 甚至每个项目都不得不自己编写一个 INSTALL 或 BUILD 文档来专门教别人如何编译; 3. Autotools 既不通用也不思进取,直到今天依然和 GCC 、glibc 强绑定,AM 宏语法残缺不全、极难理解,并且只支持「 GNU 认为你只需要」的寥寥几门语言和功能,充满了 quirks ,和其他语言的互操作更是无解问题。说是公共构建工具,更像是一群 geeks 自己开发自娱自乐的产物; 4. Makefile 完全没有考虑不同 Shell 和 Platform 的问题,想要跨平台编译,开发者不得不自己考虑并编写几百行的 boilerplates 来适配新的构建平台(例如 Windows )。 CMake is better, and Meson is even better. 如果你需要一个命令行运行器,你应该用 just 或 ninja 。 |
3 zhng920823 OP @w568w #2 所以不用 Autotools 那套东西, 直接用 Makefile, 我这个 Makefile 也可以同时用在 windows 上的 mingw |
4 zhng920823 OP @augustheart #1 这个是从我自己用的项目里抽出来的, 可以一个工程里多个可执行文件, 久而久之这个工程里的东西就越来越多越来越杂, 依赖关系越来复杂, 编译越来越慢. 因为每一个 EXE 依赖所有的 OBJ. |
5 w568w 2024-07-08 12:41:34 +08:00 @zhng920823 是啊,我知道可以用,我自己也不是没干过这事。后来换到 CMake 、Meson 才发现:干,这些事原来根本不用自己操心维护。Makefile 里判断平台大多是白忙活! 别人写了十几年的轮子了,兼容性自然远高于我们手写的几行 Makefile 。与其遇到一个不兼容问题修复一个,不如直接用现代化构建工具。 另外,只有第 3 个缺点和 autotools 有关啊,1 、2 、4 点 Makefile 都有。 |
6 zhng920823 OP @w568w #5 一直不太喜欢 cmake 等这种"大"公司推行的东西 我觉得 xmake 非常好, @
|