V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xifan8866
V2EX  ›  问与答

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

  •  
  •   xifan8866 · 2017-12-02 19:22:42 +08:00 · 3797 次点击
    这是一个创建于 2548 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    当然 LZ 要是发现了适用于各种编译器的高端简便编译链接工具,请通知我。
    msg7086
        5
    msg7086  
       2017-12-02 21:38:17 +08:00
    因为 make 是一个比较成熟又比较简单还到处都有的依赖执行工具。
    你能找到替代品吗?
    我自己是用 rake 的,写 rakefile,本质上一样,只是语法舒服点。
    wsy2220
        6
    wsy2220  
       2017-12-02 21:38:58 +08:00 via Android
    没有更好的
    hsuan
        7
    hsuan  
       2017-12-02 22:04:17 +08:00 via Android
    你可以试一试 Android 源码里用的 soong
    owt5008137
        8
    owt5008137  
       2017-12-02 22:10:48 +08:00 via Android
    cmake 里支持那么多,你就只知道 makefile。你想用 ninja 也行啊
    700388
        9
    700388  
       2017-12-03 00:20:25 +08:00
    说说我对 makefile 的看法吧。makefile 并不是编译器,g++ 才是,不过一个 g++如果要对很多文件编译的话,就要写很长的命令,为了解决这个问题,makefile 才出现了。可以更加自由的编译程序。
    如果真要改革 makefile 真正要动的是 g++ 这个东西,貌似这个没人能写出更好的东西。所以 makefile 到现在也没法真正的改革。
    不要想找到比 makefile 更好的了,最好的就是 makefile,精通后就知道他的强大之处。
    Dannytmp
        10
    Dannytmp  
       2017-12-03 06:57:31 +08:00 via Android
    通常不是 configure.make.make install 吗
    gnaggnoyil
        11
    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
        12
    forestyuan  
       2017-12-03 11:38:13 +08:00
    肯定有更好的编译方法,但是没有人去开发啊
    srlp
        13
    srlp  
       2017-12-03 14:03:34 +08:00 via iPhone
    bazel
    xifan8866
        14
    xifan8866  
    OP
       2017-12-03 17:09:04 +08:00
    @ZyZyZzz 见 13 楼,谷歌的部分开源编译器。
    xifan8866
        15
    xifan8866  
    OP
       2017-12-03 17:10:02 +08:00
    @msg7086 可以分享出来啊,没准哪天就成了大家公认的好用的工具了。
    xifan8866
        16
    xifan8866  
    OP
       2017-12-03 17:11:49 +08:00
    @700388 那可能需要时间学习了,,但是给我的感觉就是入门难,和 vim 一个样,学成了是神级的,,没学成,什么也不是。
    xifan8866
        17
    xifan8866  
    OP
       2017-12-03 17:12:27 +08:00
    @Dannytmp 是这么用,但是 makefile 是需要写的,,我说的也是写的过程,让人很抓狂。
    xifan8866
        18
    xifan8866  
    OP
       2017-12-03 17:13:45 +08:00
    @gnaggnoyil 谢谢建议,,感觉看了大家的评论中之后,我还是去学 makefile 和 cmake 吧。。毕竟现在通用。
    msg7086
        19
    msg7086  
       2017-12-03 22:15:54 +08:00
    @xifan8866 分享啥? rake 本来就是 ruby 界的标准工具链啊,大名鼎鼎的 Jim Weirich 出品。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2090 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:13 · PVG 00:13 · LAX 08:13 · JFK 11:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.