首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++构建系统

C++构建系统
EN

Stack Overflow用户
提问于 2010-05-17 08:58:08
回答 9查看 12.7K关注 0票数 23

我将启动一个新的C++项目(它可能也有一些C组件),我正在寻找一个现代化的,工业实力(即非测试版)构建系统。该软件将由几个开发人员在3-5年内创建,并将在Linux上运行(Mac和Windows稍后可能会被支持)。我正在寻找的东西,有更好的理解性,易用性和可维护性比例如make,但仍然强大到足以处理一个复杂的项目。首选开放源码软件。

到目前为止,我开始研究Boost.BuildCMakeMavenSCons,并喜欢所有这些特性和概念,但我缺乏为大型项目做出决策的经验。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-05-17 18:18:10

我使用SCons已经一年多了,它真的很酷。这是一个完整的构建系统,而不是构建脚本生成器。

它是基于Python的,您可以用Python编写SConstruct和SConscript (相当于Makefile),它允许您调用任何您想要的可用库,还有一个更清晰的语法,即Makefile授权的语法。

由于Python是跨平台的,所以SCons也是跨平台的,所以没有问题。

它与许多目标捆绑在一起:

  • 检测可用的二进制文件,并自动将多个扩展映射到正确的二进制文件。
  • 根据操作系统检测对象/库的正确扩展,但可以覆盖它。
  • 提供常见操作(构建后将被延迟)的工具,如Move、Copy、Tar,您可以提供自己的python脚本并将它们挂起。
  • 在各个层次上都提供了许多定制的钩子。

它非常高效,甚至还提出了一些高级特性(比如将预处理文件的散列存储在sqlite中而不是使用时间戳),即使最终决定了您的策略。

它还提供免费的依赖周期检测(Makefiles绝对不提供),而且界面通常更好/更自动化。

我说过它很有效率吗?显然,它允许并行执行多个作业;)

而且它也是免费的,就像在免费饮料中一样,可以随意贡献;)

我只能推荐它。

票数 7
EN

Stack Overflow用户

发布于 2010-05-17 09:27:13

我没有其他的经验,但如果你想要一个跨平台,跨工具链构建系统,使用CMake。CMake实际上不是一个构建系统,它是一个构建脚本生成器--它为许多构建系统生成实际构建脚本,并且(我认为这是优势)为主要IDE(如Visual和KDevelop )生成项目文件。顺便说一句,最近的KDevelop版本为CMake文件提供了智能感知。

生成的构建脚本或Visual解决方案并不像手动创建时那样优雅,但是由于您也不必手动维护它们,所以很好。

CMake的缺点是它并没有提供很多内置工具,或者是一种简单的方法来扩展它(与MSBuild相比,它当然只是一个构建系统,而不是一个生成器)。我们的Linux开发人员倾向于调用Unix命令行工具来执行压缩/解压缩等操作,这在典型的Windows中是不可用的,而MSBuild则有数千个来自社区项目的附加命令,因此您不需要使用命令行,而且为MSBuild创建一个新的任务非常容易。我目前正在研究如何克服CMake的这些限制,因为这意味着我们不能完全在Windows上构建,即使代码本身构建得很好。

编写CMake文件不是一次美好的经历,但没关系。该语言有一些奇怪的怪癖(比如必须精确地重复一个if-条件,这将使您发疯,特别是在实验时),而且您会非常非常不喜欢在每个具有自定义构建规则的目录中都有一个名为CMakeLists.txt的文件(在一个大型项目中,这些规则可能很多),而且它们都显示在您的IDE中;)

票数 16
EN

Stack Overflow用户

发布于 2015-02-10 23:10:12

未来的几年..。

  • 据我所见,SCons的受欢迎程度正在下降。我一点也不喜欢它。
  • Waf很棒(在我看来)。如果您正在查看SCons,请先尝试Waf。然而,并行构建总是向您显示occurred...so期望您的屏幕上充斥着错误信息的所有错误。此外,它可能会变得有点复杂的扩展。
  • Boost.Build是我的最爱之一,但却是世界上最糟糕的文档之一。除此之外,它非常灵活,几乎可以让你做任何事情。不过,有时也会有点慢。
  • CMake只适合生成忍者脚本;其他的都是垃圾(对于一个1-可执行的1-可执行项目,有4000行makefile)。
  • Tup是不错的,但它缺少任何配置。
  • Autoconf仍然是自卸车

其他未提及的问题:

  • Kbuild有点奇怪,但看起来不错。我知道的大概就是这些。
  • mk-配置对于制作情侣来说是很棒的。
  • 摇动摇语-c是灵活的,可以让您做anything...if,您知道Haskell,并且不介意放弃VS支持。
  • 贾姆普喜欢在每个该死的编译器命令的末尾插入-m32,这在64位系统上很糟糕。
  • 冻土带可以有点重复,但仍然非常快速和准确。
  • Bam...Tundra更好。它在不牺牲精确性的情况下速度很快。
  • 吉普 (用于Google /Chromium)的文档不足,但它是CMake的一个很好的替代方案。
  • 如果您重视简单性,那么预制件是很棒的,但是当它做看似简单的事情时,它可能会变得很烦人。
  • 巴菲莱具有很强的限制性,但是对于简单的项目来说却是很棒的。
  • fbuild是我的最爱(和Boost.Build一起)。它的文档非常少,但是有大量的示例和非常易读的源代码。构建脚本也很短。它用于构建(并为费利克斯设计)。它也非常、非常快,而且几乎总是非常精确,并且具有自动并行性,不会淹没屏幕。永远不会。我用它来构建正则表达式JIT引擎,我非常非常高兴。它也很容易扩展。不过,它在技术上仍然处于beta版,尽管我从未遇到过任何真正的问题。

如果您喜欢makefile生成器,我建议您使用fbuild或Boost.Build...or Gyp。

如果您想扩展基本功能,一定要使用fbuild。如果您有很多特定于平台的标志/选项以及大量的混乱,请使用Boost.Build。如果您需要一个makefile生成器或有很多配置,请尝试Gyp。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2847730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档