Ore*_*ost 16
我没有其他人的经验,但如果您正在寻找跨平台的跨工具链构建系统,请使用CMake.CMake实际上不是一个构建系统,它是一个构建脚本生成器 - 它为许多构建系统生成实际的构建脚本,并且(在我看来,这是实力)为Visual Studio和KDevelop等主要IDE生成项目文件.顺便提一下,最近的KDevelop版本具有Intellisense for CMake文件.
生成的构建脚本或Visual Studio解决方案不像手动创建时那样优雅,但由于您也不必手动维护它们,所以没关系.
CMake的缺点是它并没有真正附带很多内置工具,或者是一种简单的扩展方法(比如MSBuild,当然这只是一个构建系统,而不是一个生成器).我们的Linux开发人员倾向于调用Unix命令行工具来执行压缩/解压缩等操作,这些工具在典型的Windows安装中不可用,而相比之下,MSBuild在社区项目中提供了数千个附加命令,因此您无需使用在命令行中,为MSBuild创建一个新的任务非常简单.我目前正在研究如何解决CMake的这些限制,因为它目前意味着我们无法完全构建在Windows上,即使代码本身可以正常构建.
编写CMake文件并不是一种美妙的体验,但没关系.这种语言有一些奇怪的怪癖(比如必须在else和endif中完全重复if条件,这会让你发疯,特别是在试验时),你真的,真的很讨厌在每个文件中都有一个名为CMakeLists.txt的文件.每个目录都有自定义构建规则(在大型项目中可能很多),它们都只显示在IDE中的名称;)
未来几年......
其他未提及的:
-m32
在每个糟糕的编译器命令结束时推迟,这对64位系统来说很糟糕.如果您喜欢makefile生成器,我建议使用fbuild或Boost.Build ...或Gyp.
如果你想扩展基本功能,一定要使用fbuild.如果你有很多特定于平台的标志/选项和大量的混乱,请使用Boost.Build.如果您需要makefile生成器或有很多配置,请尝试Gyp.
我已经使用SCons超过一年了,这真的很酷.它是一个完整的构建系统,而不是构建脚本生成器.
它是基于Python的,你可以在Python中编写SConstruct和SConscript(相当于Makefile),它允许你调用你想要的任何可用库,以及一个更清晰的Makefile授权语法.
由于Python是跨平台的,SCons也是如此,没有问题.
它捆绑了许多目标:
它非常高效,甚至提出了高级功能(比如在sqlite数据库中存储预处理文件的哈希值,而不是使用时间戳),即使您最终确定了策略.
它还提供免费的依赖循环检测(Makefiles绝对没有的东西),界面通常只是更好/自动化.
我说它有效吗?那么它显然允许并行执行多个作业;)
它也是免费的,就像在免费饮料中一样,随意贡献;)
我只能推荐它.
我有机会自己比较所有这些.首先我们使用了make.这很难看.你必须成为专家才能真正了解正在发生的事情.我不会再忍受痛苦了.
然后我们搬到了SCons.它的语法还可以,你仍然可以做丑陋的事情,因为你可以编写自己的脚本,这些脚本往往是程序.这为您提供了很大的灵活性.但是我们踢了SCons,因为我们不得不等待大约20秒的时间进行项目扫描,另外20次进行构建.然后我的大学编写了python代码来将它的扫描结果缓存到文件中,几乎使性能翻倍.您仍然需要等待大约20秒才能进行构建,当您添加文件或从项目中删除一个文件时,您必须使用--fill-cache参数重新运行构建.
然后我把项目移到CMake,这绝对是我的首选工具.它的结构和语法非常易读且也有文档记录.它为几乎每个IDE生成项目,并且早期支持市场上的新IDE.然后,构建过程与IDE一样快,只需在添加新项目或更改项目属性时返回到CMake以继续使用CMake
所以我建议CMake