Waz*_*ery 247 build autotools cmake build-system scons
Autotools,Cmake和Scons之间有什么区别?
Sva*_*alf 178
事实上,Autotools唯一真正的"拯救恩典"就是所有GNU项目都在大量使用.
Autotools的问题:
它的工作原理......大部分时间......你可以对Autotools说些什么.它是一个解决几个问题的系统,这个问题只涉及GNU项目...它们的基础核心工具链代码.(编辑(2014年5月24日):应该指出的是,这种担忧是令人担忧的一个可能不好的事情 - Heartbleed部分源于这种思想和正确的现代系统,你真的没有任何业务处理Autotools纠正的大部分内容.根据Heartbleed发生的事情,GNU可能需要彻底删除代码库.你可以用它来完成你的项目,它可能很适合你做的一个小项目期望在除Linux之外的任何地方工作或GNU工具链显然正常工作.它"与Linux很好地集成" 的说法是非常大胆的陈述,而且非常不正确.它与GNU工具套件相当好地集成,并解决了IT与其目标相关的问题.
这并不是说这里的线程中讨论的其他选项没有问题.
SCons更像是Make/GMake/etc的替代品.看起来很不错,所有事情都考虑在内但是......
在这个帖子中给出CMake的例子有点虚伪.
然而...
事实上,你的目标应该决定你在这里选择什么.
很多很多项目都放弃了qmake,Autotools等,然后转向CMake.到目前为止,我可以干净地期望基于CMake的项目要么进入交叉编译情况,要么进入VisualStudio设置,或者只需要少量清理,因为项目不考虑仅限Windows或仅支持OSX的部分到代码库.我不能指望基于SCons的项目 - 而且我完全期望1/3或更多的Autotools项目会导致SOMETHING错误,从而阻止它在任何上下文中构建,除了主机构建一个或Scratchbox2之外.
Wil*_*ell 67
必须在谁使用工具之间做出重要区分.Cmake是用户在构建软件时必须使用的工具.autotools用于生成分发tarball,可以仅使用任何符合SuS标准的系统上提供的标准工具来构建软件.换句话说,如果从使用autotools构建的tarball安装软件,则不使用autotools.另一方面,如果您正在安装使用Cmake的软件,那么您正在使用Cmake并且必须安装它才能构建软件.
绝大多数用户不需要在他们的盒子上安装自动工具.从历史上看,引起了很多混乱,因为许多开发人员分发了格式错误的tarball,迫使用户运行autoconf来重新生成configure脚本,这是一个打包错误.大多数主要的Linux发行版都安装了多个版本的autotools,因为默认情况下他们不应该安装任何版本的autotools.更多的混淆是由于开发人员试图使用版本控制系统(例如cvs,git,svn)来分发他们的软件而不是构建tarball.
use*_*515 23
它不是关于GNU编码标准.
autotools的当前优势 - 特别是与automake一起使用时 - 是它们与构建Linux发行版很好地集成.
以cmake为例,它始终是"我需要-DCMAKE_CFLAGS或-DCMAKE_C_FLAGS吗?" 不,它不是,它是"-DCMAKE_C_FLAGS_RELEASE".或-DCMAKE_C_FLAGS_DEBUG.令人困惑的是 - 在autoconf中,它只是./configure CFLAGS =" - O0 -ggdb3"而你拥有它.
在与构建基础架构集成时,scons存在您无法使用的问题make %{?_smp_mflags},_smp_mflags在这种情况下,RPM宏大致扩展为(管理员可能设置)系统功能.人们通过他们的环境把像-jNCPUS这样的东西放在这里.由于scons不能正常工作,因此使用scons的软件包可能只能在发行版中进行连续编译.
pto*_*ato 17
关于Autotools的重要一点是,它们不是一般的构建系统 - 它们实现了GNU编码标准而不是其他任何东西.如果你想制作一个符合所有GNU标准的软件包,那么Autotools就是一个很好的工具.如果你不这样做,那么你应该使用Scons或CMake.(例如,看到这个问题.)这种常见的误解是Autotools的大部分挫败感来自于此.
虽然从开发人员的角度来看,cmake目前最容易使用,从用户的角度来看,autotools有一大优势
autotools生成单个文件配置脚本,生成它的所有文件随分发一起提供.在grep/sed/awk/vi的帮助下,它很容易理解和修复.将此与Cmake进行比较,其中在/ usr/share/cmak*/Modules中找到了大量文件,除非用户具有管理员权限,否则用户无法修复这些文件.
因此,如果某些东西不能正常工作,通常可以通过使用标准Unix工具(grep/sed/awk/vi等)以大锤方式轻松"修复",而无需了解构建系统.
你有没有挖过你的cmake构建目录来找出问题所在?与可以从上到下读取的简单shellcript相比,在生成的Cmake文件之后找出正在发生的事情是非常困难的.另外,使用CMake,调整FindFoo.cmake文件不仅需要了解CMake语言,还需要超级用户权限.
| 归档时间: |
|
| 查看次数: |
89773 次 |
| 最近记录: |