【问题标题】:Creating a Cross-Platform C++ Library创建跨平台 C++ 库
【发布时间】:2025-06-03 13:20:04
【问题描述】:

我想创建一个跨平台的 2D 游戏引擎,我想 知道如何使用 Makefile 创建跨平台项目,因此我可以将其编译到我选择的平台,并为任何平台使用自定义规则。 我正在使用 Visual C++ Express 2008 处理 windows 环境,所以会很好 如果我可以使用 Visual C++ Express 作为 IDE。

我的平台是 Nintendo DS 和 PC。

请指导我该怎么做。

提前致谢,塔米尔。

【问题讨论】:

    标签: c++ cross-platform makefile


    【解决方案1】:

    不要使用make,使用像cmake这样的跨平台工具,它会为你处理特定平台的生成。像在 Windows 上一样,它会生成项目文件以使用 Visual Studio;在 Linux 上,它会为你生成 GNU make 文件。您可以对其进行设置以找到正确库的正确版本和所有内容。 Cmake 很棒。

    CMake 不是编译器(make 也不是)——它是一个跨平台的构建自动化系统。它允许您在任何平台上进行开发,并且默认假设您正在为您正在运行的平台进行开发。如果要执行其他操作,可以指定参数。但是,大多数“跨平台”的东西仍然留给您的代码。我还推荐一个已经在许多平台上测试过的库,比如Boost。使用 Boost 可以帮助您的所有代码在任何系统上顺利运行,并且使用它基本上没有开销。

    【讨论】:

    • 感谢您的快速回答,如果可行,我将尝试 CMake 并确定您的回答是最好的。
    • 为了了解它,CMake 将负责编译等,但它只支持某些特定平台?因为我还打算为 Nintendo DS(使用 arm7/arm9 处理器)进行编译。
    • 我想我应该更清楚...我正在编辑我的答案。
    • 我已经知道 boost,我认为它不适用于 DS。我想创建一个项目,只需点击构建按钮,它就会生成 Windows 库和 Nintendo DS 库。 DS 库将使用 arm 编译器,Windows 库将使用 Visual Studio,但两者将共享相同的代码(我可以在两个平台上处理)。如果您能帮助我建立这样一个项目,那就太好了,而且我还想传递一个 PLATFORM 定义来知道我正在编译到哪个平台。
    • 几乎所有的 Boost 都可以在 DS 上运行(我敢说所有这些,但我不确定一些依赖于操作系统的东西,这并不多)。就设置而言,您可以使用您指定 CMake 在您的 makefile 中创建的编译标志,这样您就可以说 make DSmake PC,它会为您设置正确的标志和定义。
    【解决方案2】:

    我知道您可以使用 Makefile 来执行 #defines,这反过来又是交换代码块的常用技巧。还有一些方法可以检测平台,尽管这主要是针对 Mac/Windows/Linux 的差异。

    另外,Travis 可能是对的;让你的 makefile 本身是跨平台的真的很棒,因为它更容易设置构建服务器和其他东西。

    【讨论】: