【问题标题】:Best practices for a C++ portable opensource application [closed]C++ 可移植开源应用程序的最佳实践 [关闭]
【发布时间】:2009-03-26 03:47:24
【问题描述】:

我正在使用 C++ 启动一个开源跨平台项目。我的开发环境是Linux。可能还有其他开发人员也从不同的平台进行开发。所以我需要一些帮助来开始配置和开发环境设置,以便来自多个平台的所有开发人员都可以轻松开发。

以下是我的问题

  1. 编译器:打算用g++,听说是跨平台的。这是一个不错的选择吗?
  2. 制作文件:我见过 Code::Blocks 编辑器,它会即时生成制作文件,您不必手动编写。这是最佳实践还是我需要创建 make 文件?
  3. 开发跨平台应用程序时还需要注意哪些其他设置?

有什么想法吗?

编辑

感谢您的回答。还有一个问题。

您是否手动创建 makefile?或者有什么工具可以生成?

【问题讨论】:

  • 如何跨平台? (如,哪些平台)。 GUI 还是非 GUI?
  • 其中一部分将成为共享库。当然,GUI 也会在那里。

标签: c++ open-source compiler-construction makefile


【解决方案1】:

您的项目要赶上的最重要的事情是可移植性。它应该很容易为每个人构建和运行。

GCC (g++) 确实是首选编译器。它来自开源世界,因此被它广泛采用。

但是,一个简单的 Makefile 并不能解决问题。使用 CodeBlocks 或任何其他 IDE 生成它有一个问题:由于他们的平台,其他开发人员可能必须生成自己的,但手头不一定有 CodeBlocks,或者只是不想使用它。

存在几种不同的跨平台构建系统,它们与 IDE 无关。其中一些创建 Makefile,另一些不使用 make 而是自行构建。

  • 最广泛采用的构建系统是Autotools。但是,它很难学习、杂乱无章,而且总体上让人头疼。
  • 在众多其他选择中,我推荐Waf。几个大型开源项目已经证明了这一点,XMMS2 就是一个很好的例子(虽然不是一个非常流行的项目,但它有一个包含大量插件的大型构建,并且构建在包括 OS X 和 Windows 在内的许多平台上)。虽然 waf 没有被广泛采用,但它是随源代码一起提供的,并且易于设置。我给你的建议。

编辑:要开始您的开源项目,我还推荐 Karl Fogel 的 this book(可在线阅读)。玩得开心!

【讨论】:

    【解决方案2】:

    GNU C++ 编译器对于跨平台工作来说是一个相对不错的选择,除了在 Windows 上仅原生支持相对较旧的版本 (3.4)。将 4.x 系列移植到 Windows 的工作正在进行中,但到目前为止还没有准备好迎接黄金时间。

    与其关注使用哪种编译器,我更关注使用哪种语言。编写 ANSI 标准 C++ 将大大有助于使您的代码跨平台。尽可能将特定于平台的行为隐藏在一个好的工具包后面,比如 Qt。

    对于跨平台构建环境,这可能取决于您使用的工具包。 Qt有QMake,比较好。 CMake 是另一个引人注目的选择。我会避免使用 Autotools,因为它在 UNIX 之外的可移植性很差——在 Win32 上使用 Autotools 经常是该死的折磨。

    最后,现在就开始在多个平台上工作。VMware 在这样的事情上是无价的。让您的代码在 Linux、FreeBSD 和 Windows 上编译。如果你能达到这三个目标,那么将来迁移到其他平台将变得非常容易。

    【讨论】:

      【解决方案3】:
      • 现在开始在多个平台上构建:它会尽早暴露问题。
      • 如果您只关心 Linux 和 Mac OS X,那么 g++ 应该没问题。有各种可用的 IDE 和构建系统。您可能需要考虑使用autotools 来帮助提供配置支持。
      • 如果你想以 Windows 为目标,它会变得有点复杂。您可以使用 cygwin 和/或 mingw,但这有时会很复杂。各种项目使用跨平台构建和配置系统,如 CMake 来为他们处理许多问题。

      【讨论】:

        【解决方案4】:

        根据具体平台,Qt 可能会保留答案。尤其是新许可证。

        【讨论】:

        • Qt 和 qmake。我还推荐它而不是由 CodeBlocks 传播的 wxWidgets。
        【解决方案5】:

        【讨论】:

        • 好建议。我会得到它的副本。
        【解决方案6】:

        编译器:我打算用g++,听说是跨平台的。这是一个不错的选择吗?

        是的,但是哪个版本?您是否有您要使用的版本的已知问题列表?

        制作文件:我见过 Code::Blocks 编辑器,它会即时生成制作文件,您不必手动编写文件。这是最佳做法还是我需要创建 make 文件?

        经典的选择。当项目增长时,您可能需要调整它们。

        开发跨平台应用程序时需要注意哪些其他设置?

        g++/makefile 端口可用于所有主要平台。因此,一旦您确定您没有使用任何特定于平台的 API 或构造,您就可以开始使用了。

        接下来呢?

        • 第三方库?确保您不会迷恋某个特定平台。
        • 许可问题(您的代码和其他人)
        • 单片机

        【讨论】:

        • 我有最新版本的 G++。在 ubuntu 中使用包管理器安装。
        • 我真的不需要知道,但你应该知道 :) 只需确保记下所使用工具的版本即可。可以在未来的日子里减少很多悲伤。
        【解决方案7】:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-11
          • 1970-01-01
          • 2015-07-02
          • 1970-01-01
          相关资源
          最近更新 更多