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

时间:2016-08-05 12:56:45

标签: c++ cross-platform

我的任务是以动态库的形式创建 C ++ SDK ,最有可能。

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

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

我的主要困境是:

  1. 项目设置。我应该准备不同的项目模式以便在不同的平台上使用(例如Windows上的.sln和Linux上的makefile),或者尝试使用像CMake这样的工具?是否有可能准备一个适合所有这些目标平台的CMake项目?
  2. 编译工具链。我应该使用" native"每个平台的C ++编译器(如Windows上的MSVC和Linux上的GCC),或者像Clang + LLVM这样的单一工具链? Clang + LLVM(以及一些显然的链接器)是否能够为我需要的所有这些平台构建可分发的二进制文件?
  3. 开发环境。哪种OS / IDE最适合从事这类项目?我更喜欢在Windows上工作而我常用的IDE是Visual Studio - 在这种情况下是否可行,或者其他更合适的东西?
  4. 我知道我的问题非常复杂,对于这些问题都没有直接的答案,但我们非常感谢每一条建议甚至部分答案:)

2 个答案:

答案 0 :(得分:2)

正如你所说,没有一个适合所有人的解决方案,所以我会提出一些一般性的建议。随意选择,因为您认为最有利。

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

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

    2. 如果您避免使用与系统相关的标头,库或扩展,那么您使用的系统并不重要。像<windows.h><linux/*.h>这样的事情是显而易见的,但可以通过尽可能频繁地测试外国系统来验证跨平台兼容性的最佳方式。

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

答案 1 :(得分:1)

您很可能需要多个工具链(您提到C ++并且它没有ABI,因此可以在Windows上使用,或多或少需要使用CL构建)。因此,您将无法使用单个特定于供应商的项目设置。随着项目的发展,维护多个版本的项目文件变得非常难以维护,因此您选择的构建系统至关重要。查看Shake并与具有类似功能集的替代品进行比较。 IDE的选择不太重要 - 许多程序员更喜欢他们喜欢的编辑器(Emacs或Vim),并且可能需要在任何支持的平台上工作。