Autotools,Cmake和Scons之间有什么区别?
Autotools,Cmake和Scons之间有什么区别?
Answers:
实际上,Autotools唯一真正的“省钱”之处就是这是所有GNU项目都在大量使用的东西。
自动工具的问题:
它可以工作...大多数时候...关于Autotools的全部内容。它是一个系统,可以解决几个真正与GNU项目有关的问题……就其基础,核心工具链代码而言。(编辑(2014年5月24日):应该指出的是,这种关注是一种潜在BAD是担心关于我们-心脏出血漏洞的事情,从这个思路,并与正确的,先进的系统,你朵朵部分真没有任何业务可以处理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一个任何上下文排除了。
必须区分谁使用这些工具。Cmake是构建软件时用户必须使用的工具。自动工具用于生成分发压缩包,该分发压缩包仅可使用任何与SuS兼容的系统上可用的标准工具来构建软件。换句话说,如果要从使用自动工具构建的压缩包中安装软件,则说明您没有在使用自动工具。另一方面,如果要安装使用Cmake的软件,则说明您正在使用Cmake,并且必须安装它才能构建软件。
绝大多数用户不需要在盒子上安装自动工具。从历史上看,由于许多开发人员分发格式错误的tarball迫使用户运行autoconf来重新生成配置脚本,因此引起了很多混乱,这是打包错误。大多数主要的Linux发行版都安装了多个版本的自动工具,而默认情况下它们不应该安装任何版本,这引起了更多的混乱。由于开发人员试图使用版本控制系统(例如cvs,git,svn)来分发其软件而不是构建tarball,造成了更大的混乱。
asciidoc
或help2man
,doxygen
或者重要的是,需要正确的自动工具组合。对于汽车工具来说,这一直是一个巨大的市场问题。用户错误地认为他们需要安装autoconf,因为他们不了解tarball和VCS之间的区别。
这与GNU编码标准无关。
自动工具(特别是与自动制作一起使用)的当前好处是,它们与构建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的软件包可能只会在发行版中进行序列化。
./configure CFLAGS=-O0
经常失败的软件包会覆盖makefile中的CFLAGS并要求用户run ./configure --enable-debug
。(例如tmux
)。
关于Autotools的重要信息是它们不是通用的构建系统-它们实现GNU编码标准,仅此而已。如果您要制作一个符合所有GNU标准的软件包,那么Autotools是一项出色的工作工具。如果不这样做,则应使用Scons或CMake。(例如,请参阅此问题。)这种常见的误解是大多数Autotools沮丧的根源。
AUTOMAKE_OPTIONS = -foreign
中禁用GNU标准Makefile.am
。(或者-foreign
在您的autogen.sh
。我想几乎每个人都使用它。)
installcheck
和规则构建GNU样式的tarball的基本前提distclean
。如果您在仍然使用Autotools的情况下尝试更改这种行为,那么您就是在浪费时间。
尽管从开发人员的角度来看,cmake当前是最易于使用的,但从用户角度来看,自动工具具有一个很大的优势
autotools会生成一个文件配置脚本,所有要生成它的文件都随发行版一起提供。在grep / sed / awk / vi的帮助下很容易理解和修复。将此与Cmake进行比较,在/ make / usr / share / cmak * / Modules中可以找到很多文件,除非用户具有管理员访问权限,否则无法修复该文件。
因此,如果某些事情行不通,通常可以使用大锤方式轻松地通过使用标准Unix工具(grep / sed / awk / vi等)“修复”,而无需了解构建系统。
您是否曾经浏览过cmake构建目录以找出问题所在?与可以从上到下读取的简单shellscript相比,跟踪生成的Cmake文件以查找正在发生的情况非常困难。同样,对于CMake,改编FindFoo.cmake文件不仅需要CMake语言知识,而且还可能需要超级用户特权。