【发布时间】:2019-01-08 01:51:48
【问题描述】:
问题:
我正在编写一个主要是 C++ 的 SDK。源代码将授权给为其付费的开发人员,输出库和包含头文件将免费供公众使用。该 SDK 将面向众多平台,包括 Windows、Xbox、Playstation、Android、iOS、Mac OS X 和 Linux。我是那种最喜欢 Visual Studio 并且通常使用 Windows 机器开发软件的人。在过去的几年里,Visual Studio 使这比以前容易多了,我有一个非常清晰的路径来定位所有前面提到的平台,使用 Visual Studio 项目文件集作为带来所有我的源代码文件放在一起......不幸的是,Mac OS X 除外。 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,但允许重新分发其输出项目,并支持我需要的所有平台。不用说,这会消耗大量的开发时间。
我在这里缺少任何其他选项吗?非常感谢您的意见。
【问题讨论】:
-
总有谦虚而强大的
Makefile?GNU Make运行在所有东西上。 -
当我开始使用 CMake 时(几年前),我也有类似的担忧。之前,我和你做的类似 - 主要在 Notepad++ 中调整了我的 VS 2008 项目文件。迁移到 VS2010 是不可能的——项目被破坏了。 (可能迁移工具很垃圾。)一位同事说服我改用 CMake。现在,项目设置非常简单 - 通过一些帮助程序,
CMakeLists.txt非常简短、清晰且易于维护。从现在开始,我不再关心 VS 项目的内容(有时只是查看它们以检查内容)。而且,实际上,我必须承认我并没有那么想念它。 -
试试 CMake,真的。
-
github.com/chronoxor/CppTemplate - 这是我的跨平台 C++ 模板项目,其中包括 C++ 库、示例、单元测试、性能基准,支持 Linux、OSX、Windows、Cygwin、MinGW 编译和 Travis/Appveyor CI
标签: c++ cmake cross-platform