编译系统。 除了简单的配置,制作,安装

全部或几乎全部(如果您不走运的话),我们不得不从源代码编译程序。 实际上,在大多数项目中,只需执行./configure && make && make install即可安装程序,但是我们将看到不同的选择:

GNU 制造

GNU Make是一个低级编译系统,几乎没有任何配置,并且不执行任何测试:

优点:

  • 非常广泛
  • 简单易懂

缺点:

  • 很少可配置
  • 保养困难
  • 不执行测试

make

BSD制作

BSD Make是* BSD操作系统当前使用的Make的另一个版本。 GNU Make在功能上是最全面的BSD Make,尽管它不那么广泛,但它有所不同。

优点:

  • 简单易懂
  • 比GNU Make更多的功能

缺点:

  • 在Linux世界中并不普遍
  • 不执行测试
  • 很少可配置
  • 保养困难

make

自动工具

Autotools是GNU官方系统,它会生成一个名为configure的脚本,必须调用该脚本才能从GNU Make生成相应的Makefile。 它被广泛使用,但是越来越多的人(包括我自己)认为它太笨拙,困难,缓慢并且不十分兼容。

优点:

  • 高度可配置
  • 非常广泛

缺点:

  • 非UNIX系统之间的可移植性很小
  • 执行太多测试(检查所有内容,然后检查所有内容)
  • 配置时非常慢
  • 向后兼容性差

./configure && make

CMake的

(我最喜欢的系统)CMake是一种系统,可以弥补Autotools在许多方面的缺点,例如其可怕的向后兼容性和可移植性。 还改进了可以针对每个项目的需求进行高度配置的测试系统。 事实是,越来越多的项目使用CMake,例如KDE,PortAudio,Ogre3D等。 我们可以通过CMakeLists.txt文件识别这种类型的系统,该文件将为Eclipse或CodeBlocks生成Makefile或项目

优点:

  • 强大的跨平台支持
  • 您可以以非常可定制的方式定义测试

缺点:

  • 一开始很难理解
  • 首先您必须使用可能令人恐惧的抽象
  • 传播很少,尽管会一点一点地增长

cmake . && make

制作

QMake是由Trolltech设计的系统,用于编译Qt中的项目。 通过这种方式,qmake非常重视Qt,通常是诸如QtCreator之类的IDE使用的格式。 它在Qt项目中非常流行,但是在这种环境之外找不到:

优点:

  • 与Qt很好地集成
  • Qt内良好的多平台

缺点:

  • 在Qt应用程序之外罕见

qmake . && make

SCCons

SCons是一个基于Python的系统,用于编译C / C ++项目。 与Autotools,CMake或QMake不同; SCons不会生成Makefile。 SCons的修改性很强,但在简单操作中可能是最慢的
优点:

  • 容易修改
  • 参加公平考试

缺点:

  • 传播很少

scons

升压杰姆

Boost.Jam是Perforce Jam的一个版本,在流行的C ++ Boost库中使用,尽管编译系统可以单独使用。 与GNU Make不同,Boost.Jam使用Jamfile,这是Makefile的改进版本。 它们在BeOS / Zeta / Haiku环境中非常受欢迎。

优点:

  • 最短的写

缺点:

  • 传播很少
  • 难以执行测试

bjam

忍者

Ninja是由Google开发的系统,可提供最初设计为Chromium项目的系统的超快速构建系统。 Ninja的设计不易于修改,据其自己的作者说,应该找到一个生成Ninja的系统。 推荐的是CMake和gyp。

优点:

  • Muyrápido

缺点:

  • 您需要另一个系统来生成忍者
  • 传播很少

ninja

他人

您可以使用任何其他系统,例如您自己的bash或python脚本。 还有其他非本机语言的生成器,可以使用诸如Gradle,Maven,gyp等。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   Abimaelmartell

    Make不是编译系统,它是源代码中的二进制文件(或目标)的生成器。 它也可以用作任务运行器。

    我与您不同,BSD的功能更广泛,GNU的功能更完整,功能更多。 我是根据我自己的经验说的,在BSD中我总是必须安装GNU make,因为与GNU make相比,BSD make非常简单。

    我同意您的看法,即Autotools非常繁琐,我更喜欢仅使用Makefile。 Autotools生成的Makefile很难调试。

    的问候!

    1.    阿德里安·阿罗约街

      感谢您的评论!
      在我看来,GNU make一直对原始make程序更加传统和忠实,而BSD make一直更加创新,但是在进行比较时可能是我注意到了其他事情。

      自动工具确实让人头疼。 作为Haiku操作系统的贡献者,我不得不使用自动工具移植软件,这真是太糟糕了。 在少数情况下,我最终在修复该混乱之前创建了Makefile或CMakeLists.txt。

  2.   查克·丹尼尔斯

    我目前正在使用Premake4,它基于Lua脚本非常易于配置和简单。 如果您不知道,请看看。
    恭喜您的文章,简洁明了,优秀参考。

  3.   骨头

    使用make后,使用“ make check”检查编译
    问候