为什么用 makefile 来编译 c 和 c++源码?没有更好的编译方法吗?

2017-12-02 19:22:42 +08:00
 xifan8866

很多 c 和 c++源码都用 makefile 进行编译,现在很多应用 cmake,但是 cmake 也是先转换成 makefile,然后进行编译的。就没有什么更好的方法进行编译吗?为什么非要依赖 makefile ?

3834 次点击
所在节点    问与答
19 条回复
KeepPro
2017-12-02 19:47:55 +08:00
相当于一个脚本实现编译自动化。你可以实现自己的 dmake,fmake 取代之。或者手动一个一个编译链接。
bao3
2017-12-02 19:52:06 +08:00
我也很讨厌,可是你总得指定几个参数来让编译器执行……
abscon
2017-12-02 19:53:03 +08:00
那楼主想要达到什么效果
ZyZyZzz
2017-12-02 20:06:55 +08:00
如果 LZ 是觉得 makefile 这种方式不可视化,麻烦。
那么 LZ 应该屈服于 C/C++的编译链接本来就这么复杂的事实,你学过编译原理的话应该明白我在说什么。

宇宙第一 IDE 算是一个编译链接配置可视化的典范之一吧,然而你仍得面对那一堆条条框框点来点去。

比起最原始的手动敲配置 cmake 已经算是拯救世界了好嘛。

当然 LZ 要是发现了适用于各种编译器的高端简便编译链接工具,请通知我。
msg7086
2017-12-02 21:38:17 +08:00
因为 make 是一个比较成熟又比较简单还到处都有的依赖执行工具。
你能找到替代品吗?
我自己是用 rake 的,写 rakefile,本质上一样,只是语法舒服点。
wsy2220
2017-12-02 21:38:58 +08:00
没有更好的
hsuan
2017-12-02 22:04:17 +08:00
你可以试一试 Android 源码里用的 soong
owt5008137
2017-12-02 22:10:48 +08:00
cmake 里支持那么多,你就只知道 makefile。你想用 ninja 也行啊
700388
2017-12-03 00:20:25 +08:00
说说我对 makefile 的看法吧。makefile 并不是编译器,g++ 才是,不过一个 g++如果要对很多文件编译的话,就要写很长的命令,为了解决这个问题,makefile 才出现了。可以更加自由的编译程序。
如果真要改革 makefile 真正要动的是 g++ 这个东西,貌似这个没人能写出更好的东西。所以 makefile 到现在也没法真正的改革。
不要想找到比 makefile 更好的了,最好的就是 makefile,精通后就知道他的强大之处。
Dannytmp
2017-12-03 06:57:31 +08:00
通常不是 configure.make.make install 吗
gnaggnoyil
2017-12-03 11:33:12 +08:00
LZ 当然可以不用 makefile 啊.在 POSIX binutil 底下至少还有 bazel 和 Waf 可以用不是么.或者 LZ 想自己撸一个也可以.甚至在一些特殊的情况下还有特殊的构建工具,比如用来构建 CPython extension 的 distutils.

不过我想提醒 LZ 一点的是(至少 GNU 的)make 面对"大量依赖并行处理"这个需求是很好用的工具,而额外撸在这方面能够做的更好的轮子不是一件简单的事情.所以 LZ 最好想想:你当然可以不用 make,但是你确定你不用 make 能够获得更多的好处吗?
forestyuan
2017-12-03 11:38:13 +08:00
肯定有更好的编译方法,但是没有人去开发啊
srlp
2017-12-03 14:03:34 +08:00
bazel
xifan8866
2017-12-03 17:09:04 +08:00
@ZyZyZzz 见 13 楼,谷歌的部分开源编译器。
xifan8866
2017-12-03 17:10:02 +08:00
@msg7086 可以分享出来啊,没准哪天就成了大家公认的好用的工具了。
xifan8866
2017-12-03 17:11:49 +08:00
@700388 那可能需要时间学习了,,但是给我的感觉就是入门难,和 vim 一个样,学成了是神级的,,没学成,什么也不是。
xifan8866
2017-12-03 17:12:27 +08:00
@Dannytmp 是这么用,但是 makefile 是需要写的,,我说的也是写的过程,让人很抓狂。
xifan8866
2017-12-03 17:13:45 +08:00
@gnaggnoyil 谢谢建议,,感觉看了大家的评论中之后,我还是去学 makefile 和 cmake 吧。。毕竟现在通用。
msg7086
2017-12-03 22:15:54 +08:00
@xifan8866 分享啥? rake 本来就是 ruby 界的标准工具链啊,大名鼎鼎的 Jim Weirich 出品。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/411432

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX