Windows和Linux编译的Autotools与CMake

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自

我一直在寻找Autotools和CMake的优缺点。但我想知道,在项目中使用过其中一种(或两种)工具的人的意见

一年前我基本上使用了Autotools,我知道其中一个优点是它依赖于shell脚本,因此它不需要安装就可以运行,并且使用可移植的shell脚本。但是它看起来太面向unix了,并且不可能在Windows上运行配置文件

我现在必须选择一个构建系统的工具,至少要编译Linux和Windows。它是用C++编写的,使用QT-GUI前端,其余的是“通用”。
谢谢您的帮助。

我不推荐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日:随着工具的发展,完善的建议

我以前使用自动工具已经有相当长的时间了

目前,我只在需要时才大量使用和制作

一些个人建议:

  • 对于大型团队,如果您想使用XCode的生成器,请坚持使用CMake。如果你不需要它,我会直接使用介子。从0.49版开始,Meson还支持查找CMake配置文件(尽管我还没有测试它的工作情况)。另外,VisualStudio在这个时候似乎得到了足够好的支持,尽管我也没有亲自尝试。CMake的优势在于它集成了Visual Studio

  • 放下自动工具。介子已经涵盖了一切。他们的交叉编译模型令人惊讶地可以理解。在CMake,上次我检查时,一切都很困难

  • 我也试过,也试过

    功能最全的跨平台系统是
    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+忍者依赖
    Cmake

    优点:

    • 为许多不同的IDE生成项目。这对于团队来说是一个非常好的特性
    • 与自动工具不同,它可以很好地使用windows工具
    • 成熟,几乎是事实上的标准
    • 微软正在为VisualStudio开发CMake集成
    缺点:

    • 它不遵循任何众所周知的标准或指南
    • 没有卸载目标
    • DSL很奇怪,当你开始做比较之类的事情,字符串与列表或转义符,你会犯很多错误,我敢肯定
    • 交叉编译很糟糕
    自动工具

    优点:

    • 最强大的交叉编译系统,IMHO
    • 生成的脚本只需要make、一个shell,如果需要构建,还需要一个编译器
    • 命令行非常好而且一致
    • unix世界的标准,有很多文档
    • 非常强大的命令行:更改安装目录、卸载目录、, 正在重命名二进制文件
    • 如果您以unix为目标,那么使用此工具打包源代码确实很方便