【问题标题】:A type safe build system for C++ (something like SBT)用于 C++ 的类型安全构建系统(类似于 SBT)
【发布时间】:2012-09-12 22:48:34
【问题描述】:

在使用 Scala 的简单构建工具 (SBT) 并喜欢它之后,我正在开发一个广泛使用 CMake 的 C++ 项目。 CMake 文件相当复杂,修改它们甚至理解它们都很痛苦。相比之下,我发现即使是大型项目的 SBT 配置也是可读的,我认为这是由于静态类型和不变性。

是否有任何努力将 SBT 风格的优点带入 C++?

【问题讨论】:

  • 构建系统类型安全意味着什么?您正在寻找能够检测 ODR 违规的东西吗?看看 Microsoft detect_mismatch pragma/d1reportSingleClassLayoutXXX 编译器开关
  • @BenVoigt 在 SBT 中,您使用 Scala 编写构建文件。因此,构建文件被编译,并且由于类型错误或代码约束(例如通过隐式)而导致的不一致被检测到。相比之下,SCons(例如)使用动态语言,并且仅在评估错误声明时才报告错误。
  • 如果您喜欢 SBT,那么我认为没有什么能阻止您通过命令行编译器步骤使用 SBT。因此,您将拥有一组 SBT 语句,用于生成带有适当参数的编译器命令行,然后执行编译器命令行。这就是任何各种版本的 make 以及用于构建工具的 Ant 和其他类型的脚本语言所做的。据我所知,SBT 只是另一个用于创建和执行编译器命令行的平台。
  • 如果查看en.wikipedia.org/wiki/List_of_build_automation_software,我们将不断努力为任何口味制作大量的构建工具。很多东西都可以构建 C++。 SBT 似乎是“种族主义者”(仅构建 Scala 和 Java)。那么你的问题又是什么?

标签: c++ cmake sbt build-automation


【解决方案1】:

使用 SCons,您可以获得 Python 的类型安全性 - 因此只是动态的运行时类型安全性。其他任何事情都取决于您的 IDE(即静态代码分析)。因此,我认为 SBT 有其优势,因为您拥有 Scala 的编译时类型安全性。

但对于 C/C++,我认为 SCons 更适合(我是 SConsolidator 的作者 - 所以我可能有偏见)。它有内置扫描器来检测包含依赖项和生成器来生成目标文件、静态和共享库——所有这些都是 SBT 目前没有的——至少据我所知。

【讨论】:

  • 与 CMake 相比,看起来一切都是字符串,Python 的运行时类型安全性确实更胜一筹。但是,我对 static 类型安全感兴趣,例如从 SBT 获得的类型安全。出于这个原因,我不能接受这个答案(虽然我做了+1)。
  • 我广泛使用了Waf,这是另一个基于 Python 的构建系统,不久前与 NS-3 一起发布,除了“安全”之外,它是一切。因此,我经历了广泛的链接和运行时问题。每当对类结构进行重大修改时,最好的选择总是启动./waf clean 以“避免问题”。
【解决方案2】:

我与boost 合作了很长时间,我非常喜欢它,所以也许我在夸大其词,但您应该看到boost.build 它非常容易用于非常大的项目(例如boost本身)。

【讨论】:

  • 能否请您添加有关它如何强制类型安全的信息?我快速浏览了文档,但没有找到答案。
猜你喜欢
  • 2013-05-12
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多