全部或几乎全部(如果您不走运的话),我们不得不从源代码编译程序。 实际上,在大多数项目中,只需执行./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等。
Make不是编译系统,它是源代码中的二进制文件(或目标)的生成器。 它也可以用作任务运行器。
我与您不同,BSD的功能更广泛,GNU的功能更完整,功能更多。 我是根据我自己的经验说的,在BSD中我总是必须安装GNU make,因为与GNU make相比,BSD make非常简单。
我同意您的看法,即Autotools非常繁琐,我更喜欢仅使用Makefile。 Autotools生成的Makefile很难调试。
的问候!
感谢您的评论!
在我看来,GNU make一直对原始make程序更加传统和忠实,而BSD make一直更加创新,但是在进行比较时可能是我注意到了其他事情。
自动工具确实让人头疼。 作为Haiku操作系统的贡献者,我不得不使用自动工具移植软件,这真是太糟糕了。 在少数情况下,我最终在修复该混乱之前创建了Makefile或CMakeLists.txt。
我目前正在使用Premake4,它基于Lua脚本非常易于配置和简单。 如果您不知道,请看看。
恭喜您的文章,简洁明了,优秀参考。
使用make后,使用“ make check”检查编译
问候