问题:
我正在编写主要是C ++的SDK。源代码将授权给付费的开发人员,输出库和包含标头将免费提供给公众使用。该SDK将针对众多平台,包括Windows,Xbox,Playstation,Android,iOS,Mac OS X和Linux。我是一个最喜欢Visual Studio,通常使用Windows机器开发软件的人。在过去的几年中,Visual Studio使其比以前容易得多,在这里,我有一条很清晰的路径,可以使用Visual Studio的一组项目文件作为事实源来针对所有上述平台。不幸的是,我的源代码文件在一起……除了Mac OSX。 Visual Studio能够通过分别分别与Mac或Linux盒进行远程接口进行编译和调试来构建iOS和Linux的可执行代码,这确实很酷,但是由于某些原因,这里没有将Mac OS X作为目标。另外,我很清楚,还有很多其他专业开发人员不会在Windows计算机上编写代码,他们也没有购买Visual Studio商业许可证的兴趣。
问题: 由于C ++仍然没有构建系统标准,而且可能从未使用过,因此我该如何维护一个单一的事实源,该目标源可以维护针对许多不同平台的所有源文件的构建配置,同时最大程度地减少了获得支持的障碍需要开发,运行和调试我的源代码的软件开发人员客户?
我知道的可能答案:
A)Visual Studio项目仍然是其他任何C ++项目类型(例如Android Studio,XCode和.make文件)的来源。我知道可以将VS转换为.make之类的工具,但实际上还没有尝试过(我的源代码库已经开始变得很大了)。或者,我可以咬一下子弹,然后手工书写它们,并尝试使它们保持同步。
B)CMake。叹。令人沮丧的是,它非常受欢迎,似乎可以完全解决我的问题,但是它有其自身的一系列问题,似乎是破坏交易的事情。对于初学者来说,一旦您进入CMake,您几乎无法返回。使用Visual Studio和属性表,我已经能够使用大多数情况下继承的属性和很少在项目和配置之间重复的属性来调整构建配置。据我所知,CMake并不关心尊重此类事物,对于通用属性,它只是在所有vcxproj文件中复制它们。更糟糕的是,它在输出项目中生成的所有文件路径都是绝对的,而不是相对的,并且最重要的是,它迫使其他构建您的代码的人使用CMake,不允许分发没有它创建的项目构建文件。另外,这甚至适用于游戏机吗?最后,我检查了我是否找到了不破坏源代码的合理方法来支持它们。
C)滚动我自己的脚本,该脚本类似于CMake,但允许重新分配其输出项目,并支持我需要的所有平台。不用说,这将花费大量的开发时间。
我在这里还缺少其他选择吗?非常感谢您的投入。
答案 0 :(得分:1)
我同意@Scheff和@arrowd的评论。使用CMake。我已经构建了软件并将其部署到了多个平台,而CMake是我发现的用于构建C ++代码的最佳解决方案,尽管并非完美。
您尝试过CMake并且无法使用它吗?还是您在寻找更好的东西?当然,有多个C ++构建系统,但是尽管有缺点,我相信CMake是目前最好的系统。