build文件 - 安装visual c++ build tools



C++构建系统-使用什么? (6)

+1,“很多,他们很糟糕。”

但是,“最丰富”和“最可伸缩”可能是CMake ,它是一个Makefile生成器(也生成本机MSVC ++ *.proj / *.sln )。 奇怪的语法,但一旦你了解它,它可以让你很好地为不同的平台生成构建。 如果我“开始新鲜”,我可能会使用CMake 。 它应该处理你的列表,尽管你的“代码生成”可以在构建系统之外采取“一生一世”的方式,这取决于你想要做什么。 (见下文。)

对于简单的项目, QMake生成器是可以的(你不需要使用Qt库来使用QMake)。 但是,你并没有描述“简单” - 代码生成和“额外阶段”意味着你可能需要CMake或者为你自己的扩展使用丰富的API,比如Scons (或Waf )。

我们在工作中使用Scons 。 它产生了“防弹建造”,但速度很慢。 没有其他系统会像Scons那样Scons 。 但是,这很慢。 它是用Python编写的,我们扩展了“workspace-organization”(我们只指定模块依赖关系)的接口,这是Scons设计意图的一部分(这种类型的Python扩展)。 方便,但建设速度缓慢。 你可以获得防弹版本(任何开发者盒子都可以制作最终版本),但速度很慢。 而且,速度很慢。 不要忘记,如果你使用Scons ,那很慢。 而且,速度很慢。

想到2000年后的十年,我们仍然没有飞行汽车,这让我感到不适。 我们可能需要等待另一个百年或其他东西来获得它们。 而且,我们可能都会在我们的飞行汽车中飞来飞去,这些飞行汽车仍在使用蹩脚的构建系统。

是的,他们都很糟糕。

[关于代码生成]

Scons在“阶段”上工作,他们“有点静态”。 它可以构建作为构建的一部分生成的代码(人们正在通过几种不同的方式来实现这一点),但是这被描述为“非常非Scons的东西”。

如果它很简单,“预处理一些文件并生成源文件”,那么就不会出现大问题(您有很多选项,这就是qmake编写的原因 - 用于*.hpp/*.cpp文件的moc预处理)。

但是,如果您以“沉重的方式”来做这件事,那么您将需要编写自己的脚本。 例如,我们使用了构建部分脚本来查询数据库并生成C ++类以在“层”(在传统的3层应用程序开发中)之间进行接口。 同样,我们通过IDL和嵌入式版本信息生成服务器/客户端源代码,以允许多个客户端/服务器同时运行不同版本(针对同一个“客户端”或“服务器”)。 很多生成的源代码。 我们可以“假装”这个“构建系统”,但实际上,它是一个“非常简单”的“配置管理”基础设施,其中一部分是“构建系统”。 例如,这个系统必须把“取下”和“启动”服务器作为这个过程的一部分。 同样,回归测试作为这个过程的一部分被执行,在版本之间进行大量的“报告”和“差异测试” - 这些都是我们“构建脚本”的一部分。

https://code.i-harness.com

我正在研究用C ++开始一个新项目 - 就在我最初的时候 - 我正在研究可用的构建系统。 看起来答案是“很多,而且都很糟糕”。

我特别需要的功能是:

  1. C ++ 11支持
  2. 跨平台(Linux作为主要目标,但至少可以在Windows上构建)
  3. 体面的单元测试支持
  4. 支持多个用于分离代码的模块
  5. 支持代码生成(使用asn1c或protobuf - 目前还不是100%)
  6. 易于维护

现在,我知道我可以轻松地使用CMake和Autotools中的1-4个。 也许也与SCons和Waf以及其他人一起。 问题是我从来没有弄清楚如何正确地使用它们来进行代码生成 - 也就是在构建过程第一次运行之前不存在的源文件,所以构建系统必须能够将其转换为可执行代码的源文件但直到构建开始时才真正知道......(尤其是ASN1C会生成许多必须能够一起工作的头文件和源文件,而实际的文件集取决于您的asn文件的内容)还有一个事实是,这些都不是特别容易维护 - CMake和Autotools有他们自己需要管理的大量脚本,Waf和Scons要求与他们合作的任何人都有Python的正当知识(I不要)与他们一起工作......

那么 - 对于这样的东西,推荐哪些构建系统? 或者现在我会被困在make文件和shell脚本中吗?



你可以使用Ceedling 。 但请注意,它目前仅支持C,并且与作者的Unity和CMock测试框架紧密结合。

它可以分叉和修改,以便相当容易地使用C ++编译器和单元测试/模拟框架。

Tup也值得一提。 它速度非常快,但对测试框架等一无所知,这意味着您必须使用Tup编写自己的构建系统。 如果你打算做TDD,Tup可能是要走的路。



我使用了SCons,并且对这个构建系统印象深刻。 SCons可以通过python和python本身进行扩展 - 这很好,因为Python拥有你所需要的一切,只需编写逻辑代码,所有低级功能已经在SCons和Python中实现,并且是跨平台的。 如果具有良好的编程技能,那么您的构建脚本将看起来完美和简单。

Make,CMake和类似的构建系统似乎是宏的垃圾。 Waf是SCons类比。 我想Waf,但SCons会更友好,所以我留下了SCons。

根据观众的意见SCons太慢了,但在一个项目的中间,我看不到建造速度与make和SCons之间的区别。 相反,SCons在并行构建方面做得很好,而make则有很大的麻烦。

此外,SCons允许您从一个模板中配置,构建,部署,从模板生成配置,运行测试以及执行可以用python和SCons进行编码的任何其他任务。 这是一个非常大的优势。

对于一个简单的项目来说,CMake也是一个不错的选择。


我最近发现了这些,我还没有亲自使用它们:

Ninja ,一个专注于速度的小型构建系统。 谷歌现在使用忍者来构建Android而不是Make: link

Shake ,强大而快速的构建系统。

Tup ,一个高性能的构建系统。 基于Algorithmic的设计。 Tup分析

所有这些都是跨平台的并且支持Windows。 我还不确定你的其他要求,因为我还没有自己测试它们。 它们被用于商业开发, CIG选择了Ninja。 前两个类似于Scons,Ant等。





build