多平台C++项目设置和工具

Mit*_*dis 6 c++ cross-platform

我的任务是创建一个C++ SDK - 最有可能是动态库的形式.

它应该用于不同的平台 - Windows(32/64位),Linux(32/64位),Mac OS,AndroidiOS.我对多平台项目设置没有多少经验,我正在尝试决定使用哪些方法和工具进行最简单的开发和部署.

附注:我还必须在Bamboo CI服务器上准备自动构建(作业),以便为每个所需目标运行编译和测试.

我的主要困境是:

  1. 项目设置.我应该准备不同的项目模式以便在不同的平台上使用(例如Windows上的.sln和Linux上的makefile),或者尝试使用像CMake这样的工具?是否有可能准备一个适合所有这些目标平台的CMake项目?
  2. 编译工具链.我应该为每个平台使用"原生"C++编译器(如Windows上的MSVC和Linux上的GCC),还是像Clang + LLVM这样的单一工具链?Clang + LLVM(以及一些显然的链接器)是否能够为我需要的所有这些平台构建可分发的二进制文件?
  3. 发展环境.哪种OS/IDE最适合从事这类项目?我更喜欢在Windows上工作,我通常的IDE是Visual Studio - 在这种情况下是否可行,或者其他更合适的东西?

我知道我的问题非常复杂,对于这些问题没有直接的答案,但是每个建议甚至部分答案都会非常感激:)

小智 3

正如你所说,没有一刀切的解决方案,所以我会提出一些一般性建议。请随意挑选您认为最有益的。

    • 如果您计划在主机操作系统上进行构建,cmake 听起来正是适合您的工具。它自我描述为“构建系统生成器”,其中抽象了在特定主机操作系统上构建的步骤,这意味着相同的设置“应该”适用于任何 cmake 支持的系统。
    • 如果您正在考虑交叉编译,那么您可能会因为 iOS 和 MacOS 目标而受到一些伤害。据我所知,并且我已经付出了一些努力,Apple 不会为不在其系统上运行的系统发布编译器 -> 您必须从 MacOS 计算机为 iOS 和 MacOS 进行编译。如果你能证明我在这一点上是错的,我会很高兴听到:)
    • 根据您的许可要求,如果您确实想要一个过度的解决方案,您可以考虑 Qt* 和 qmake。我对他们的多架构解决方案非常幸运,并且 Qt 支持您在原始问题中列出的所有系统。我发现 Qt + qmake 比 cmake 更容易处理。

* 是的,Qt 在非 GUI 上也能很好地工作!

  1. 我在 1. 的第二点中谈到了这一点,但我的一般建议是使用本机工具链。除了 MacOS 之外,设置虚拟机、构建服务器等来构建本机代码很容易,而我对交叉编译器的经验是它们总是会增加另一层心痛,甚至比必须远程访问单独的构建器计算机更糟糕。

  2. 只要您避免使用与系统相关的标头、库或扩展,那么您使用什么系统就无关紧要。<windows.h>诸如和 之类的事情<linux/*.h>是显而易见的,但验证跨平台兼容性的最佳方法是尽可能频繁地测试外部系统。

    • 与所使用的编译器无关,我建议打开所有警告。它们通常很重要,并且可能表明编译器能够对问题进行创可贴,但尝试为另一个系统进行编译会失败。如果您在一个团队中工作,最好设置警告以导致构建错误,以确保团队的其他成员与您一样严格。
    • 我不知道 LLVM 或 MSVC,但如果您给它-pedantic-ansi标志,GCC 会给您一些关于特定于平台的扩展的提示。正如这里所解释的,这些标志告诉 GCC 对任何 GNU 特定的扩展发出警告。