Windows和Linux编译的Autotools与CMake
我一直在寻找Autotools和CMake的优缺点。但我想知道,在项目中使用过其中一种(或两种)工具的人的意见 一年前我基本上使用了Autotools,我知道其中一个优点是它依赖于shell脚本,因此它不需要安装就可以运行,并且使用可移植的shell脚本。但是它看起来太面向unix了,并且不可能在Windows上运行配置文件 我现在必须选择一个构建系统的工具,至少要编译Linux和Windows。它是用C++编写的,使用QT-GUI前端,其余的是“通用”。Windows和Linux编译的Autotools与CMake,cmake,build-process,portability,autotools,Cmake,Build Process,Portability,Autotools,我一直在寻找Autotools和CMake的优缺点。但我想知道,在项目中使用过其中一种(或两种)工具的人的意见 一年前我基本上使用了Autotools,我知道其中一个优点是它依赖于shell脚本,因此它不需要安装就可以运行,并且使用可移植的shell脚本。但是它看起来太面向unix了,并且不可能在Windows上运行配置文件 我现在必须选择一个构建系统的工具,至少要编译Linux和Windows。它是用C++编写的,使用QT-GUI前端,其余的是“通用”。 谢谢您的帮助。我不推荐Windows自
谢谢您的帮助。我不推荐Windows自动工具。使用CMake 为什么??Windows没有本机sh.exe,模拟速度较慢。也很容易出错。我并不是说这在CMake中是不可能的,但CMake肯定会提取更多的内容,所以您担心的更少。CMake文档可能有点难读,但一旦设置好,您就可以使用CMake支持的所有工具链了。CMake还集成了测试、包装等功能 Autotools在Windows上运行缓慢,不易与MSVC一起工作,并且在Windows(和其他操作系统)上存在难以调试和修复的奇怪怪癖。libtool也喜欢Windows,在Windows中,即使您认为它应该而且可能,它也常常拒绝构建共享库。工具链重定位问题在libtool中也很普遍,它可能会查看用户工具链中的错误文件。在这方面,CMake要容易得多。它假设了目标平台的正常情况,并创建了通用的、良好的构建指令 此外,CMake有彩色输出:)和良好的进度百分比
附言:我只是作为一名用户,对Windows上的CMake和autotools有一些经验。CMake会起作用,当你不看的时候,自动工具会咬你的耳朵,当它由于一些奇怪的错误而失败时,会对你微笑…更新于2019年1月16日:随着工具的发展,完善的建议 我以前使用自动工具已经有相当长的时间了 目前,我只在需要时才大量使用和制作 一些个人建议:
CMake
,但对于习惯python和其他语言的人来说,meson的DSL将更容易使用。介子也开始支持VS(VS2015生成器),一些项目已经有了实验支持,例如gstreamer。Gstreamer也在windows中使用介子编译。现在有VS2015发电机和VS2017发电机,但我最近没有尝试自己的发电机。从介子0.37.1开始需要做一些工作,但他们正在改进,目前的版本已经是0.40
介子
优点:
- DSL一点也不碍事。事实上,它是非常好和熟悉的,基于python
- 经过深思熟虑的交叉编译支持
- 对象都是强类型的:您不能轻易地犯字符串替换错误,因为对象是诸如“depencence”、“include directory”等实体
- 如何为您的一个工具添加模块非常困难
- 交叉编译似乎更易于使用
- 考虑得很好。介子的设计者和主要作者知道什么 他在设计构建系统时谈得很好
- 非常非常快,尤其是在增量构建中
- 该文档比您在cmake中找到的要好10倍。去参观,你会发现教程,如何和一个很好的参考。它并不完美,但确实是可以发现的
-
<> Li >虽然不像CMake那样成熟,但我认为它已经完全可以用于C++。
- 但是可用的模块并不多,gnome、qt和常见的模块已经存在
- 项目生成器:似乎VS生成器目前还没有那么好地工作。CMake项目生成器要成熟得多
- 有蟒蛇3+忍者依赖李>
- 为许多不同的IDE生成项目。这对于团队来说是一个非常好的特性
- 与自动工具不同,它可以很好地使用windows工具
- 成熟,几乎是事实上的标准
- 微软正在为VisualStudio开发CMake集成
- 它不遵循任何众所周知的标准或指南
- 没有卸载目标
- DSL很奇怪,当你开始做比较之类的事情,字符串与列表或转义符,你会犯很多错误,我敢肯定
- 交叉编译很糟糕
- 最强大的交叉编译系统,IMHO
- 生成的脚本只需要make、一个shell,如果需要构建,还需要一个编译器
- 命令行非常好而且一致
- unix世界的标准,有很多文档
- 非常强大的命令行:更改安装目录、卸载目录、, 正在重命名二进制文件
- 如果您以unix为目标,那么使用此工具打包源代码确实很方便