我正在考虑在C++中开始一个新项目-最初只是在我的业余时间-我正在研究可用的构建系统。答案似乎是“很多,而且它们都很糟糕”。
为此,我特别需要的特性是:
<代码>H111易于维护<代码>H212<代码>G213
现在,我知道我可以使用CMake和Autotools轻松地完成其中的1-4个。可能还包括SCons和Waf以及其他几家公司。问题是,我从来没有想过如何正确地使用它们进行代码生成--即在构建过程首次运行之前不存在的源文件,因此构建系统必须能够转换为可执行代码,但直到构建开始时才真正知道的源文件……(尤其是ASN1C生成了几十个必须能够协同工作的头文件和源文件,实际生成的文件集取决于你的asn文件的内容)还有一个事实是,这些文件都不是特别容易维护的-- CMake和Autotools有自己的大量脚本,你需要管理它们才能工作,而Waf和Scons要求任何使用它们的人都有不错的python知识(我没有)才能使用它们……
那么,对于这样的事情,推荐使用什么构建系统呢?或者我现在只能使用make文件和shell脚本了?
发布于 2012-08-19 06:21:07
+1代表,“太多了,它们太可怕了。”
但是,“最丰富的”和“最具伸缩性的”可能是CMake,它是一个Makefile生成器(也生成原生的MSVC++ *.proj
/*.sln
)。奇怪的语法,但是一旦你学会了它,你就可以很好地为不同的平台生成构建。如果我是“started fresh”,我可能会使用CMake
。它应该处理您的列表,尽管您的“代码生成”可能会在构建系统之外呈现“自己的生命”,这取决于您想要做什么。(请参见下文。)
对于简单的项目,可以使用QMake生成器(使用QMake不需要使用Qt库)。但是,您没有描述“简单”--代码生成和“额外阶段”意味着您可能需要CMake
或具有丰富应用编程接口的扩展,如Scons
(或Waf
)。
我们在工作中使用Scons。它产生了“防弹构建”,但它真的很慢。没有其他系统会像Scons
一样防弹。但是,它很慢。它是用Python语言编写的,我们已经为我们的“工作空间组织”(我们只指定模块依赖项)扩展了接口,这是Scons
设计意图的一部分(通过Python进行的这种类型的扩展)。很方便,但是构建速度很慢。你得到了无懈可击的构建(任何开发人员盒都可以完成最终版本),但速度很慢。而且,它很慢。但是,不要忘记,如果您使用Scons
,它的速度会很慢。而且,它很慢。
想到2000年后的十年,我们仍然没有会飞的汽车,这让我很不舒服。我们可能还要等上一百年才能拿到它们。然后,我们可能都会开着我们的会飞的汽车到处飞来飞去,这些汽车仍然是用糟糕的建造系统建造的。
是的,它们都很糟糕。
关于代码生成
Scons
在“阶段”上工作,它们是“有些静态的”。它可以构建作为构建的一部分生成的代码(人们用几种不同的方式来做这件事),但这被描述为“非常不像Scons的东西”。
如果只是简单的“预处理一些文件并生成源文件”,那么就没什么大不了的(您有很多选择,这就是为什么编写qmake
--用于*.hpp/*.cpp
文件的moc
预处理)。
然而,如果你是以一种“繁重的方式”来做这件事,你将需要编写自己的脚本。例如,我们有作为构建的一部分的脚本,它查询数据库并生成C++类来在“层”之间进行接口(在传统的3层应用程序开发中)。类似地,我们通过IDL生成服务器/客户端源代码,并嵌入版本信息,以允许多个客户端/服务器同时运行不同的版本(对于相同的“客户端”或“服务器”)。大量生成的源代码。我们可以“假装”这是“构建系统”,但实际上,它是一个用于“配置管理”的非平凡的基础设施,其中一部分是“构建系统”。例如,此系统必须将“关闭”和“启动”服务器作为此过程的一部分。类似地,回归测试是作为这个过程的一部分执行的,版本之间有大量的“报告”和“差异测试”--所有这些都是我们“构建脚本”的一部分。
发布于 2014-06-18 21:57:54
现在可以使用Gradle了:https://docs.gradle.org/current/userguide/native_software.html
自从我最初发布这篇文章以来,这似乎已经相当成熟了。说这个项目正在“孵化”的页面已经消失了,但我找不到任何官方声明删除这个状态。
发布于 2014-12-16 02:08:48
我找到了这些,我还没有亲自使用过:
Ninja,一个专注于速度的小型构建系统。谷歌现在使用忍者来构建Android,而不是Make:link。
Shake,一个强大而快速的构建系统。
Tup,一个高性能的构建系统。基于Algorithmic的设计。Analysis of Tup。
所有这些现在都是跨平台的,并且都支持Windows。我还不确定您的其他需求,因为我还没有亲自测试它们。他们正在被用于商业开发,CIG拿起了忍者。我已经使用并喜欢忍者的轻松和快速的项目生成器。前两个类似于Scons、Ant等。
https://stackoverflow.com/questions/12017580
复制相似问题