【问题标题】:What is the best way to do cross-platform development with Visual Studio?使用 Visual Studio 进行跨平台开发的最佳方法是什么?
【发布时间】:2010-09-24 03:17:54
【问题描述】:

我们正在多个平台(DS/Wii/Xbox 360/PS3/PC/PSP)上开发大量游戏。每个都有自己的编译器/链接器和调试器。我们希望使用 Visual Studio 作为 IDE 并管理构建过程,但使用平台特定的编译器(和设置)来生成适当的输出。我们可以在 VS 之外管理构建过程(使用 jam 或 ant say),但这不是首选的解决方案。

在网络上拖网,这似乎是一个常见问题,但没有人有好的解决方案。有没有人解决过这个问题?处理此问题的最佳方法是什么。

我想到了许多解决方案 - 在预构建步骤中从 solition 自动生成 nant 脚本(可能工作最少,但仍然不理想),将 cl.exe 和 link.exe 替换为存根应用程序,使用 msbuild (但这是面向 .net 开发而不是本机代码),编写自定义 VS 插件(大量工作 - 任何指向现有商业或开源软件的指针都会很好)。有人试过这些吗?对你有好处吗? ;)

干杯

【问题讨论】:

    标签: visual-studio-2008 visual-studio-2005 msbuild build-process


    【解决方案1】:

    CMake 不符合我的要求。需要明确的是 - 当我说“管理构建过程”时,我的意思是,任何人都可以从存储库中获取项目,然后在 VS 中选择平台、编译/运行、添加文件、更改设置等,这一切都是神奇的; ) 所以回答我自己的问题,经过一番挖掘,这就是我想出的。

    做到这一点的“正确”方法是为 VS 编写一个插件,添加一个新平台,该平台将出现在配置管理器中(就像他们为 Xbox、Pocket PC 等所做的那样)。不幸的是,微软似乎以其无限的智慧决定不将这一特定功能的 API 暴露给未洗过的大人物。

    但是,您可以编写一个插件并同时将 cl.exe 和 link.exe 替换为存根程序,这些存根程序将实际编译分配给适当的编译器。似乎有一个开源项目VSItanium 用于此(尽管仅在 2003 年,并且必须针对自定义编译器进行修改)。 SNSystems 也通过他们的 PSP 的VSI 包来做到这一点。

    编写插件需要一些时间,因此在此期间,一个快速的权宜之计的解决方案是编写一个脚本来解析解决方案和项目文件并提取重要部分并生成要包含在 nant 中的文件(或制作,或堵塞或其他) - 从每个构建步骤调用。要么这样做,要么沿着整个makefile解决方案走下去:/

    MSBuild 确实应该是前进的方向。我玩得很快,你可以(几乎)做我想做的一切,但不知何故,它并没有完全凝固。一直认为这是一个 C# 项目 - 可能需要花更多的时间来了解它,除非任何 MSBuild 专家想指出我正确的方向。

    【讨论】:

    • 我也想要这个。编辑文本文件似乎是一个巨大的后退。我们的初级开发工具是 win32 上的 MS IDE,但我们正在为 linux 移植/构建。我想从VS自动生成构建文件,而不是从某个文本文件然后构建另外两个。这里有一个我可以想象的产品创意。
    【解决方案2】:

    你看过CMake吗?它可以根据文本描述生成 Visual Studio 项目文件。

    【讨论】:

    • AFAICS CMake 以“错误的方式”工作。我们希望通过 VS 管理项目,而不是在一些任意的构建系统中管理它们然后生成 VS 项目。现在,如果 CMake 可以采用 VS 解决方案并构建设置,那将是另一回事;)
    • 哼。我总是尽量避免在 Visual Studio 中管理项目,因为对它的支持非常糟糕。
    【解决方案3】:

    Homebrew PSP SDK (MinPSPW) 上使用的另一个选项是使用 Makefile 项目。您使用 VS 中的代码编辑器,但最终当您调用编译器时,它将使用基于您的 makefile 的正确编译器。大多数输出​​错误将被 VS 捕获并在您的源中突出显示。

    【讨论】:

      【解决方案4】:

      支持 CMake 的建议,但需要注意的是,您将无法在 VS 中为 其他 平台管理项目。它只是不是为了管理当前项目/目标/平台以外的任何东西的库路径、定义等而编写的。您几乎肯定需要说“平台 X 的库就在这里”,而我只是看不到通过 VS 做到这一点的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-23
        • 2017-02-20
        • 2016-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-28
        相关资源
        最近更新 更多