【问题标题】:Need to build GUI with no conditional compilation需要构建没有条件编译的 GUI
【发布时间】:2014-08-23 07:46:30
【问题描述】:

最近我一直在寻找我应该使用什么来构建带有 GUI 的 C++ 应用程序,发现 wxWidgets 和 QT 最近主要使用,但我读到 QT 有机会在不久的将来占据主导地位,因此它是首选许多我从未使用过它,但我想知道为什么它变得如此受欢迎。但是,我不知道它是否能满足我的要求。

我们的目标是确保我们的软件无需复杂配置即可在 Windows 和 Linux 上运行(例如安装 MinGW 只是为了运行我的应用程序),并且无需任何条件编译即可在两者上进行编译。我必须坚持“无条件编译”规则;

我想知道无论我使用 wxWidgets 还是 QT,CMake 是否可以处理所有这些问题。

【问题讨论】:

  • 你对“无条件编译”的理解是什么?您的代码中没有#ifdef,或者您的Cmake 中没有条件选择文件?
  • CMake + Qt 可以很好地满足您的条件。
  • wxWidgets 不需要额外的软件来运行,因为它可以在任何平台上使用本平台的本机 API 调用来实现。关于“无条件编译” - 你真的需要解释你的意思。
  • 没有条件编译意味着确保软件在 linux 和 windows 中运行而无需安装其他复杂的东西我只是提到了两次目标以强调我需要什么。我只是认为 QT 可能很复杂,但它似乎可以正常工作并且值得使用谢谢所有
  • 要使用 Qt 构建软件,您需要安装完整的 Qt 开发包。一旦你这样做了,该建筑实际上需要两个命令:qmake,然后是make。没有比这更简单的了。你甚至不需要使用 cmake 来开始。 qmake 是 Qt 的一部分。

标签: c++ qt user-interface cmake wxwidgets


【解决方案1】:

我只能回答 CMake 和 Qt 的情况。如果您将 Qt 与 CMake 一起使用,您可以构建适用于 Windows 和 Linux 的可执行文件,而无需更改一行代码,也不需要条件代码。

这也是 Qt 占据主导地位的原因。它只是节省了大量时间,因为您只需编写一次所有代码,并且只需要在不同平台上编译相同的源代码。

而且代码保持非常干净,因为您不需要任何“宏魔法”来在 Windows 和 Linux 之间构建不同的代码。

【讨论】:

  • 感谢您的回答,我只需要知道 QT 是否可以灵活使用,而且似乎是这样,所以我现在会尝试使用它,因为我的合作伙伴有时会在他的 linux 平台上编写代码,如果使用 QT 意味着我们可以轻松地在 windows 和 linux 上编写代码而无需更改代码,这听起来很棒!
  • 应该是这样的。您唯一需要关心的是:A)Qt 库本身。在 Windows 和 Linux 上,您都必须使用相同的选项和模块构建库。 B)当然要确保您的代码是可移植的,您不得使用任何特定于平台的 API(例如 Windows API)。对于几乎所有内容,您都应该使用 Qt API,而不是特定于平台的 API。因此,Qt 文档绝对很棒,所以你会在那里找到你需要的一切。
【解决方案2】:

对于我的项目,我倾向于在 Linux 和 Windows 上使用 wxWidgets(我需要 GUI)。对于 Windows,我使用 mingw-w64 作为工具链,其中 wxWidgets 静态编译(或我使用的任何其他库)。

因此,当我为 Windows 平台发布新版本时,我不需要担心最终用户的依赖关系,因为它是在可执行文件中静态链接的。当然,您可以对动态链接做同样的事情,但是将所有内容都链接到应用程序中并不那么痛苦。 Windows 版本通常通过 Code::Blocks 生成,但也可以通过 Windows 上的 makefile 轻松完成(使用 mingw-w64)。

在 Linux 上,我通常只是在新版本中提供源代码。在 Linux 上,我使用一个简单的 makefile。

【讨论】:

  • OP 询问 CMake 是否可以为 Qt 或 wxWidgets 处理不同平台的不同配置。此外,似乎 OP 不喜欢为该项目安装另一个编译器(mingw)。也许你可以在这些方向上扩展这个答案。事实上,这更像是一种意见而不是答案。
猜你喜欢
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 2022-10-29
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多