当前位置:  开发笔记 > 编程语言 > 正文

什么是目前最好的构建系统

如何解决《什么是目前最好的构建系统》经验,为你挑选了4个好方法。

几年前,我研究过使用一些Make不合适的构建系统,像CMake和SCons这样的工具似乎很原始.我想知道情况是否有所改善.因此,根据以下标准,目前最好的构建工具是什么:

平台不可知:应该在windows,linux,mac上工作

语言不可知:应该内置支持常见的东西,比如构建C/C++和其他静态语言.我想它不需要支持完整的autotools套件.

可扩展:我需要能够编写规则来生成文件,比如来自restructuredText,latex,自定义格式等.我真的不在乎我用什么语言编写规则,但我更喜欢真正的语言而不是DSL .

我宁愿避免手工编写任何XML,我认为这ant需要.

免费提供(最好是开源)

"最佳"一词略显主观,但我认为答案可以通过上述标准客观地评价.



1> Kornel Kisie..:

我明确地投票支持预制.虽然它没有它的兄弟那么强大,但它的主要优点是荒谬的简单性和易用性.使编写多编译器,多平台代码变得轻而易举,并且本机生成Visual Studio解决方案,XCode项目,Makefile等,无需任何额外的工作.


在我看来,Premake嵌入了一个Lua解释器,这是一种比CMake更强大的脚本语言.

2> Andrew Wagne..:

当然,这取决于您的优先事项.如果您主要是为了易用性,那么至少有两个新的构建系统可以挂钩到文件系统中,以与语言无关的方式自动跟踪依赖关系.

一个是tup:

http://gittup.org/tup/

另一个是制造:

http://code.google.com/p/fabricate/

似乎是表现最好,最便携,最成熟(也是我实际使用的那个)的那个是tup.写它的人甚至维护一个玩具linux发行版,其中一切都是git子模块,所有东西(包括内核)都是用tup构建的.从我读到的内核构建系统,这是一个相当大的成就.

此外,Tup清理旧目标和其他cruft,并可以自动维护您的.gitignore文件.结果是,尝试使用目标的布局和名称变得微不足道,并且您可以自信地在git修订版之间跳转而无需重建所有内容.它是用C语言写的.

如果您知道haskell并且正在寻找非常高级的用例,请查看shake:

http://community.haskell.org/~ndm/shake/

更新:我还没有尝试过,但这个新的"buildsome"工具也挂钩到文件系统,并受到tup的启发,因此是相关的:

https://github.com/ElastiLotem/buildsome



3> Ben Karel..:

所以,在这个问题,这似乎是最适合构建系统规定的标准纯粹判断可能是WAF -纯Python,提供了对C++等语言,一般情况下,强大的,而不是一个DSL.


但是,根据我的个人经验,我更喜欢CMake for C++项目.(我试过CMake,SCons和waf,并按照这个顺序喜欢它们).CMake是一个通用的解决方案,但它内置了对C++的支持,这使得它比实际做C++时更通用的解决方案更好.

CMake的C++构建模型更具说明性,更少命令性,因此对我来说更容易使用.CMake语言语法不是很好,但是使用奇怪语法的声明性构建胜过Python中的命令式构建.在这三者中,CMake似乎也对"高级"事物(如预编译头文件)提供了最佳支持.设置预编译头文件可将重建时间缩短约70%.

CMake的其他优点包括体面的文档和相当大的社区.许多开源库都具有CMake构建文件,无论是在树中还是由CMake社区提供.有一些主要项目已经使用CMake(OGRE浮现在脑海中),其他主要项目,如Boost和LLVM,正在转向CMake.

我在试验构建系统时发现的部分问题是我试图在OS X上构建一个NPAPI插件,结果发现很少有构建系统被设置为给XCode提供这样做所需的标志的确切组合.CMake,认识到XCode是一个复杂且移动的目标,提供了一个钩子,用于在生成的XCode项目(和Visual Studio,我认为)中手动设置命令.就我而言,这非常聪明.

无论您是构建库还是应用程序,还可以确定哪种构建系统最佳.Boost仍然使用基于jam的系统,部分原因是它为管理比"Debug"和"Release"更复杂的构建类型提供了最全面的支持.大多数boost库有五个或六个不同版本,特别是在Windows上,预计需要兼容库的用户可以链接不同版本的CRT.

我在Windows上使用CMake没有任何问题,但当然你的里程可能会有所不同.有一个很好的用于设置构建依赖关系的GUI,尽管用于重建很笨拙.幸运的是,还有一个命令行客户端.到目前为止我已经解决的是有一个瘦的包装器Makefile从一个objdir调用CMake; 然后CMake在objdir中生成Makefile,原始的Makefile使用它们来进行构建.这可以确保人们不会意外地从源目录调用CMake并使其存储库变得杂乱无章.结合MinGW,这款"CMake三明治"提供了非常一致的跨平台构建体验!



4> Ben S..:

CMake的

CMake是一个可扩展的开源系统,它以独立于编译器的方式管理操作系统中的构建过程.


CMake比autotools要好得多,但它仍然使用自己的DSL,我认为这是一个障碍:你必须投资学习新语言.出于这个原因,我会选择Waf(Python)或Rake(Ruby)等解决方案.
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有