Jul*_*rra 37 portability build-process autotools cmake
我一直在寻找Autotools和CMake的优点和缺点.但我想知道那些使用这些工具中的一个(或两个)的人的意见.
我基本上在一年前使用过Autotools,我知道其中一个优点是它依赖于shell脚本,因此不需要安装它来运行并使用可移植的shell脚本.但它看起来过于面向unix,并且无法在Windows上运行配置文件.
我现在要为开源项目选择一个构建系统工具,必须至少为Linux和Windows编译.它是用C++编写的,并使用Qt GUI前端,其余部分是"通用的".
谢谢你的帮助.
Ger*_*ago 74
2019年1月16日更新:作为工具发展的精致建议.
我之前使用过autotools已经有相当长的时间了.
目前我只在需要时才使用meson和cmake.
一些个人建议:
对于大型团队,如果你想利用XCode的生成器,坚持使用CMake.如果你不需要它,我会直接使用Meson.从版本0.49开始,Meson也支持查找CMake配置文件(尽管我还没有测试它的工作情况).此外,Visual Studio在这个时间点似乎得到了足够的支持,但是,我并没有尝试过自己.CMake的优势在于它具有Visual Studio集成功能.
丢弃自动工具.Meson已经涵盖了一切.他们的交叉编译模型令人惊讶地可以理解.在CMake,我上次检查时,一切都比较困难.
最全功能,跨平台的系统,CMake
但是,介子的DSL将更容易用于python和其他人.Meson也开始支持VS(一个VS2015发生器),一些项目已经有了实验支持,例如gstreamer.Gstreamer也是在windows中编译的meson.现在有VS2015发电机和VS2017,但我最近没有尝试自己的发电机.从介绍0.37.1需要一些工作,但他们正在改进它们,目前的版本已经是0.40.
介子
优点:
缺点:
cmake的
优点:
缺点:
自动工具
优点:
缺点:
关于学习曲线,有两个非常好的资料来源:
第一个来源将让您更快地运行.这本书是一个更深入的讨论.
从Scons,waf和tup,Scons和tup更像是make.Waf更像是CMake和autotools.我起初尝试过waf而不是cmake.我认为它具有过度设计,因为它具有完整的OOP API.这些脚本看起来并不简单,对我来说工作目录的东西和相关的东西真的很混乱.最后,我发现autotools和CMake是更好的选择.我最喜欢这3个构建系统是tup.
托普
优点
缺点
doc
,因为它们生成我不知道的文件,它们必须在生成之前列在输出中,或者至少,这是我现在的结论.这是一个非常烦人的限制,如果是的话,因为我不确定.总而言之,我现在正在为新项目考虑的唯一事情是Cmake和Meson.当我有机会尝试tup,但它缺少配置框架,这意味着当你需要所有这些东西时它会使事情变得更复杂.另一方面,它真的很快.
rub*_*nvb 32
我不推荐Windows的autotools.使用CMake.
为什么?Windows没有本机sh.exe,仿真速度很慢.这也很容易让配置错误.我并不是说在CMake中这是不可能的,但CMake肯定会抽象出更多,所以你担心的更少.CMake文档可能有点难以阅读,但一旦设置完毕,您应该可以使用CMake所支持的所有工具链.CMake还集成了测试,包装等......
Autotools在Windows上运行缓慢,无法轻松使用MSVC,并且在Windows(和其他操作系统)方面存在奇怪的怪癖,难以调试且难以修复.libtool在Windows上也很糟糕,如果你认为应该也可以,它甚至会拒绝构建共享库.libtool也普遍存在工具链重定位问题,它可能会查看用户工具链中的错误文件.在这方面,CMake更容易.它假设目标平台是正常的,并创建通用和良好的构建指令.
此外,CMake有彩色输出:)和良好的进度百分比.
PS:作为用户,我只是在Windows上使用CMake和autotools有一些经验.CMake往往会起作用,当你不看的时候,autotools往往会咬你的耳朵,当它由于一些奇怪的错误而失败时会对你微笑......