几年前,我开始研究使用一些不是Make
的构建系统,而像CMake和SCons这样的工具似乎非常原始。我想知道情况是否有所改善。因此,根据以下标准,目前最好的构建工具是什么:
ant
需要。“最佳”一词略显主观,但我认为答案可以通过上述标准客观评价。
答案 0 :(得分:24)
我明确表示赞成premake。虽然它没有它的兄弟那么强大,但它的主要优点是荒谬的简单性和易用性。使编写多编译器,多平台代码变得轻而易举,并且本机生成Visual Studio解决方案,XCode项目,Makefile等,无需任何额外的工作。
答案 1 :(得分:14)
当然,这取决于您的优先事项。如果您主要是为了易用性,那么至少有两个新的构建系统可以挂钩到文件系统中,以与语言无关的方式自动跟踪依赖关系。
一个是tup:
另一个是制造:
http://code.google.com/p/fabricate/
那个看起来性能最好,最便携,最成熟(也就是我实际使用的那个)的东西就是tup。写它的人甚至维护一个玩具linux发行版,其中一切都是git子模块,所有东西(包括内核)都是用tup构建的。从我读到的关于内核构建系统的内容来看,这是一个相当大的成就。
此外,Tup清理旧目标和其他残骸,并可以自动维护您的.gitignore文件。结果是,尝试使用目标的布局和名称变得微不足道,并且您可以自信地在git修订版之间跳转而无需重建所有内容。它是用C语言编写的。
如果您知道haskell并且正在寻找非常高级的用例,请查看shake:
http://community.haskell.org/~ndm/shake/
更新:我还没有尝试过,但是这个新的“构建体”工具也会挂钩到文件系统,并受到tup的启发,因此是相关的:
答案 2 :(得分:13)
因此,纯粹根据问题中提出的标准判断,看起来最合适的构建系统可能是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三明治”提供了非常一致的跨平台构建体验!
答案 3 :(得分:6)
CMake是一个可扩展的开源软件 管理构建过程的系统 在一个操作系统和一个 与编译器无关的方式。
答案 4 :(得分:2)
Gradle似乎符合上述所有标准。
这是一个构建系统,它充分利用了Maven和Ant的组合。对我来说,这是最好的。
答案 5 :(得分:1)
Selenium项目正在转移到Rake,不是因为它是最好的,而是因为它处理多种语言略好于所有其他构建工具,并且是跨平台的(用Ruby开发)。
所有构建工具都存在问题,人们会学会与它们共存。在JVM上运行的东西往往非常适合构建应用程序,因此Ant,Maven(我知道它很可怕),Ivy,Rake
答案 6 :(得分:-1)
Final Builder在Windows世界中是众所周知的
答案 7 :(得分:-2)
smooth build符合您的大部分要求。
披露:我是顺利构建的作者。