使用C ++进行跨平台编译

时间:2014-03-22 01:27:49

标签: c++

我正在制作我的第一个真正的C ++游戏,我希望能够在Windows,Mac和Linux上运行。我已经明白,要实现这一点,您的库需要支持这些平台(我只使用GLFW)。我的问题是:

  1. 在编译时我完全迷失了。我知道你不能使用MinGW,因为它只支持Windows。我会用什么?

  2. 就IDE而言,哪种情况最适合在这种情况下使用?我目前正在使用Visual Studio,但我听说我无法与之交叉平台。我也有Code :: Blocks,不介意切换。

  3. 跨平台编译的最佳做法是什么?我能安全地在Windows上做一切,还是应该设置Linux和Mac虚拟机?

3 个答案:

答案 0 :(得分:1)

如果您的代码不依赖于任何系统级库,例如网络,I / O等,那么只要您坚持使用ISO C ++标准,它就应该可以跨不同平台移植。即使您确实需要访问某些依赖于操作系统的低级系统库,在Windows上也可以使用Cygwin来模拟类似Unix的系统(如Linux和OS X)的行为。然后您可以使用GCC编译代码,可以解决对系统库的任何依赖性。对于IDE,Eclipse CDT可能是一个选项,因为它可以在所有三个平台上运行。使用虚拟机或真机为所有平台构建单独的代码库是另一种选择,但是当您去测试代码时,无论如何都需要它。

答案 1 :(得分:0)

针对您的第一个C ++游戏瞄准所有这三个游戏是雄心勃勃的,主要是因为开发“工具链”在每个平台上通常都是如此不同。您可以尝试在所有三个上使用gcc编译器和Eclipse之类的东西,但更常见的是最终使用:

  • Windows上的Visual C ++ / Visual Studio
  • Linux上的GCC /(各种IDE)
  • OS X / Xcode IDE上的GCC或Clang

我见过的用于从一个代码库中解决所有这些问题的最佳解决方案是CMake工具包。通过以CMake格式描述您的代码库,它将为您自动生成(并保持最新)平台/ IDE特定的解决方案/项目/ makefile,以及一些帮助设置自动构建,构建仪表板的工具,自动化测试等。

或者,您可以保留对C ++的细粒度控制并在Java中进行编码,这在这些操作系统中更加统一(但是,当然,它有自己的问题集。)

答案 2 :(得分:0)

如何开发跨平台! (指南)

  1. 永远不要使用任何特定于平台的功能(例如,包含是不可能的)
  2. 始终使用某种形式的构建工具。我强烈建议不要使用AutoMake,如果你想在Windows上工作(你现在可以开枪)。只要你信任他们的扩展,CMake就是好的。
  3. 编译器有自己的特定错误。真!一个好的做法(如果可用)是在尽可能多的平台上使用相同的编译器。幸运的是,LLVM / Clang可以在所有三个大目标上使用!如果你的目标是进行适当的跨平台化,我建议将它用于该项目。
  4. 你想要一个Minds-Its-Own-Business(tm)的编辑。例如,Visual Studio(和codeblocks!)会强制它们构建系统。我建议使用vim(轻量级控制台/图形(带gvim)文本编辑器)或geany(带插件的轻量级IDE)
  5. 仿真器是邪恶的!远离MinGW,Wine,Cygwin等。不,真的。
  6. 尽可能使用编译器从源代码编译库。它更安全,可让您微调功能。 (GLFW可以做到!)
  7. 这将有所帮助。另外,GLFW怎么样?