【问题标题】:Tools for c++ multiplatform projects用于 c++ 多平台项目的工具
【发布时间】:2013-03-19 10:01:13
【问题描述】:

我正在使用 Visual Studio 2010 处理一个 c++ 多平台项目,所有平台之间有一个共享的代码部分,但有很大一部分是专用于每个平台的,我使用 #if def 将它们分开,但事实证明,代码维护变得非常糟糕,代码杂乱无章,此外还有一些问题,例如代码在某些定义打开或关闭时无法编译。

是否有任何用于 Visual Studio 的插件或工具有助于开发多平台项目,例如隐藏与平台相关的代码,或使用打开/关闭的不同#defines 进行编译,检查数据类型等。

如果有人有建议,我将不胜感激

【问题讨论】:

  • 使用if (kFeatureFoo) 而不是#if kFeatureFoo 通常会有所帮助:这意味着编译器仍然需要检查代码是否是有效的 C++,并且仅由优化器完成删除(无法消除的代码消除是一种常见的、稳健的优化)

标签: c++ visual-studio-2010 debugging embedded multiplatform


【解决方案1】:

我不知道这样的 VS 插件,但由于它基本上是一个仅限 Windows 的 IDE,我怀疑是否有。 (当然我可能是错的)

如果您正在寻找一个好的跨平台构建系统,我会寻找CMake。它功能强大、易于上手,并且可以为几乎所有流行的 IDE/工具链(Visual Studio Solutions、Eclipse Projects、MinGW Makefiles、GNU Makefiles 等)生成构建文件。

它使大型项目的跨平台开发变得轻而易举!

【讨论】:

  • 好吧,你得到了我对 cMake 的支持,但这并不是一件轻而易举的事 ;-)
  • 我想这更像是一个稳定的逆风,但在我看来,这比手动跨平台开发的持续风暴要好得多。 ;)
  • 我也强烈推荐 CMake。它适用于多个平台、多个操作系统和多个编译器。我在 64 位 Windows 上使用多个版本的 Visual Studio 最常使用它,但是我也在 Linux 上构建了我的应用程序,对 CMake 配置文件几乎没有更改。是的,CMake 确实有能力管理定义。
  • 我想在 CMake 之上添加 jenkins 或 hudson jenkins-ci.org 作为构建的 CI 服务器。然后开发人员可以在他们选择的 IDE 中工作,并简单地向服务器提交一个可交叉构建的东西。 (好吧,它强制执行干净的代码,因为 MSVC 允许一些令人讨厌的不符合代码,而 GCC 崩溃并在构建服务器中为构建破坏者施加惩罚 ;-))
【解决方案2】:

如果您切换到 Qt 框架,您可能会消除大部分依赖于平台的代码。您可以继续使用带有 Qt 插件的 VS,并且通过使用 Qt 的平台抽象,您可以使用(几乎)相同的代码库来定位许多不同的平台。您将获得无与伦比的平台支持和可移植性:

  • 窗口
  • Linux(Qt 原生于 KDE 和未来版本的 Ubuntu)
  • MacOS
  • BB10(Qt 也是 BB10 原生的)
  • 嵌入式 Linux
  • Android(下个月推出)
  • iOS(下个月也是)
  • 乔拉
  • Tizen

API 也更好 IMO - 不那么丑陋和尴尬,更一致。此外,QML(JSON 样式标记,用于从 C++ 组件构建应用程序,使用 JS 进行胶水代码和值绑定)可以显着提高您的生产力(高达 10 倍而不夸张)。 Qt 工具链支持不同的套件(库版本编译器和平台的组合)和多平台交叉编译。

【讨论】:

    【解决方案3】:

    没有比 Visual Studio 本身更多的“工具”了。将代码分离到不同的项目中;通用代码的项目和每个平台的项目。

    别忘了:

     1. Add reference to common project in all platform-dependent projects (so common project is compiled before platform project). 
     2. Add common project base to the common include directories of each target project.
    

    【讨论】:

      猜你喜欢
      • 2016-12-11
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 2020-09-05
      相关资源
      最近更新 更多