+1表示“很多,他们很糟糕”。
但是,“最丰富”和“最可扩展”的可能是CMake,它是一个Makefile生成器(还生成本机MSVC ++ *.proj
/ *.sln
)。很奇怪的语法,但是一旦学习了它,就可以让您很好地为不同平台生成构建。如果我“从头开始”,我可能会使用CMake
。它可以处理您的列表,尽管您的“代码生成”可能会在构建系统之外承担“自己的一生”,具体取决于您想做什么。(见下文。)
对于简单的项目,可以使用QMake生成器(无需使用Qt库即可使用QMake)。但是,您并不是在描述“简单”,而是代码生成和“额外阶段”,这意味着您可能想要CMake
或带有丰富API的用于自己的扩展的东西,例如Scons
(或Waf
)。
我们在工作中使用Scons。它会产生“防弹产品”,但速度确实很慢。没有其他系统可以像一样防弹Scons
。但是,它很慢。它是用Python编写的,并且已经扩展了“工作空间组织”的接口(在这里我们仅指定模块依赖项),这是Scons
设计意图的一部分(通过Python进行的这种扩展)。方便,但是构建缓慢。您可以获得防弹版本(任何开发人员都可以制作最终版本),但是速度很慢。而且,它很慢。不过请不要忘记,如果使用Scons
,它会很慢。而且,它很慢。
我很难想到,在2000年之后的十年,我们仍然没有飞行的汽车。为了获得它们,我们可能不得不再等一百年。而且,那时我们所有人都可能会乘坐我们仍在使用笨拙的构建系统建造的飞行汽车四处飞行。
是的,他们都很糟糕。
[关于代码生成]
Scons
在“阶段”上工作,它们是“有点静态”的。它可以构建作为构建的一部分而生成的代码(人们以几种不同的方式来执行此操作),但是这被描述为“非常不像Scons的东西”。
如果是简单的“预处理一些文件并生成源文件”,那么就没什么大不了了(您有很多选择,这就是为什么qmake
要编写文件moc
预处理的原因*.hpp/*.cpp
)。
但是,如果您以“繁重的方式”执行此操作,则需要编写自己的脚本。例如,我们有一部分构建脚本,这些脚本查询数据库并生成C ++类以在“层”之间进行接口(在传统的3层应用程序开发中)。同样,我们通过IDL生成了服务器/客户端源代码,并嵌入了版本信息,以允许多个客户端/服务器以不同的版本(对于同一“客户端”或“服务器”)同时运行。很多生成的源代码。我们可以“假装”为“ the-build-system”,但实际上,它是“配置管理”的重要基础,其中一部分是“ build-system”。例如,该系统必须“删除”和“