我正在考虑用C++开始一个新项目 - 最初只是在我自己的时间 - 我正在调查可用的构建系统.似乎答案是"很多,而且它们都很可怕".
我特别需要的功能是:
现在,我知道我可以轻松地完成1-4个使用CMake和Autotools的人.可能还有SCons和Waf以及其他几个人.问题是我从来没有弄清楚如何使用它们正确地进行代码生成 - 这是在第一次运行构建过程之前不存在的源文件,因此构建系统必须能够转换为可执行代码的源文件但实际上并没有知道,直到构建开始......(ASN1C特别生成了几十个必须能够一起工作的头文件和源文件,并且生成的实际文件集取决于你的asn文件的内容)事实上,这些都不是特别容易维护 - CMake和Autotools有他们自己需要管理的大量脚本,Waf和Scons要求任何与他们一起工作的人都有很好的python知识(I不要与他们合作......
那么 - 对于这样的东西,建议使用哪些构建系统?或者我现在还会遇到make文件和shell脚本吗?
cha*_*ley 112
+1,"很多,他们很糟糕."
但是,"最富有"和"最具可伸缩性"的可能是CMake,它是一个Makefile生成器(也生成本机MSVC++ *.proj/ *.sln).奇怪的语法,但是一旦你学会了它,它可以让你很好地为不同的平台生成构建.如果我"开始新鲜",我可能会用CMake.它应该处理你的列表,虽然你的"代码生成"可以在构建系统之外"自己生活",具体取决于你想做什么.(见下文.)
对于简单的项目,QMake生成器是可以的(您不需要使用Qt库来使用QMake).但是,你并没有描述"简单" - 代码生成和"额外阶段"意味着你可能想要CMake或者为你自己的扩展提供丰富的API,比如Scons(或Waf).
我们在工作中使用Scons.它产生"防弹建筑",但它真的很慢.没有其他系统像防弹一样Scons.但是,它很慢.它是用Python编写的,我们扩展了"workspace-organization"的接口(我们只指定模块依赖项),这是Scons设计意图的一部分(这种类型的扩展通过Python).方便,但构建速度很慢.您可以获得防弹版本(任何开发人员框都可以进行最终版本),但速度很慢.而且,它很慢.不要忘记,如果你使用Scons它,它会很慢.而且,它很慢.
我认为,在2000年之后的十年,我们仍然没有飞行汽车.我们可能要等上一百年才能得到它们.而且,我们可能会在我们的飞行汽车中飞来飞去,这些飞行汽车仍在使用蹩脚的构建系统.
是的,他们都很可怕.
[关于代码生成]
Scons适用于"阶段",它们"有些静止".它可以构建作为构建的一部分生成的代码(人们以几种不同的方式执行此操作),但这被描述为"非常类似Scons的东西".
如果它很简单"预处理一些文件并生成源文件",那么没有大问题(你有很多选择,这就是为什么qmake写的 - 用于文件的moc预处理*.hpp/*.cpp).
但是,如果您以"沉重的方式"执行此操作,则需要编写自己的脚本.例如,我们有一个部分构建脚本,用于查询数据库并生成C++类以在"层"之间进行接口(在传统的3层应用程序开发中).类似地,我们通过IDL和嵌入式版本信息生成服务器/客户端源代码,以允许多个客户端/服务器同时运行不同版本(对于相同的"客户端"或"服务器").大量生成的源代码.我们可以"假装"这是"构建系统",但实际上,它是"配置管理"的一个非平凡的基础架构,其中一部分是"构建系统".例如,该系统必须"拆卸"和"启动"服务器作为此过程的一部分.同样,回归测试作为此过程的一部分执行,版本之间有大量的"报告"和"差异测试" - 所有这些都是我们"构建脚本"的一部分.
Nat*_*enn 30
您现在可以使用Gradle:https://docs.gradle.org/current/userguide/native_software.html
自从我最初发布这个以来,这似乎已经成熟了很多年.该项目正在"孵化"的页面已经消失,但我找不到任何正式声明删除此状态.
lee*_*ade 14
我最近发现了这些,我还没有亲自使用它们:
Ninja,一个专注于速度的小型构建系统.谷歌现在使用Ninja来构建Android而不是Make:link.
Shake,一个强大而快速的构建系统.
Tup,一个高性能的构建系统.基于算法的设计. Tup的分析.
现在所有这些都是跨平台的并且支持Windows.我还不确定你的其他要求,因为我还没有自己测试它们.它们被用于商业开发,CIG选择了Ninja.前两个类似于Scons,Ant等.
小智 11
Scons是非常友好和灵活的系统,但你说得对,洛萨,它真的很慢.
但是有一种方法可以提高用Python编写的程序的性能.这种使用JIT.在所有已知的项目中,PyPy是一个非常强大,快速增长且有动力的JIT支持的Python 2.7实现.PyPy与Python 2.7的兼容性简直令人惊叹.但是,Scons在PyPy兼容性维基上声明为不受支持的项目. 另一方面,Waf建模为基于python的autotools sucessor,完全由PyPy基础设施支持.在我的项目中,在向PyPy过渡时,组装的速度增加了5-7倍.您可以从PyPy中看到性能报告.
对于现代和相对快速的构建系统,Waf是不错的选择.
Google构建系统是一个不错的选择:http://bazel.io/
我使用SCons并对这个构建系统印象深刻.SCons可以通过python和python本身扩展 - 它很棒,因为Python拥有你需要的所有东西,只需编写逻辑代码,所有的低级功能都已经在SCons和Python中实现,并且是跨平台的.如果具有良好的编程技能,那么您的构建脚本将看起来完美而简单.
Make,CMake和类似的构建系统似乎是宏的垃圾.Waf是SCons模拟的.我正在尝试Waf,但SCons会更友好,所以我和SCons呆在一起.
通过群众意见SCons太慢了,但是在项目中间,我没有看到make和SCons之间的构建速度有任何区别.相反,SCons已经很好地使用了并行构建,而make则有很大的麻烦.
此外,SCons允许您获得 - 从模板配置,构建,部署,生成配置,运行测试以及执行可以使用python和SCons编码的任何其他任务 - 一体化.这是一个非常大的优势.
对于一个简单的项目,CMake也是一个不错的选择.
只是为了增加我的分数:premake
http://industriousone.com/premake
维基上还有一个专门的网页.
| 归档时间: |
|
| 查看次数: |
64746 次 |
| 最近记录: |