是否可以编译 Gtk+ 应用程序以同时在 Gtk 2 和 3 上运行

Can a Gtk+ application be compiled to run on both Gtk 2 and 3

本文关键字:Gtk 运行 编译 Gtk+ 应用程序 是否      更新时间:2023-10-16

我想构建一个同时在 Gtk 2 和 Gtk 3 环境中运行的应用程序。我有哪些选择?

  • 有两个独立的项目?
  • 有两个单独的构建步骤?
  • 是否可以构建单个可执行文件,以便它能够在两个环境中运行?

我正在Linux机器上使用带有cmake的C++。

  • 有两个单独的项目?

当然,这是一种选择。

  • 有两个单独的构建步骤?

这也是,但关键目标是生成两个不同的二进制文件(不一定都是独立的可执行文件,见下文(。

  • 是否可以构建单个可执行文件,以便它能够在两个环境中运行?

是的,但这样做并不简单。 您构建的每个二进制文件都将链接到特定的库。 否则不可能,因为 v2 和 v3 库之间存在多种名称冲突。

但是,如果您愿意抽象您的 Gtk 用法,以便提供可插拔的后端,那么您可以同时提供 Gtk+2 和 Gtk+3 后端。 还有其他人。 但这并非易事,特别是如果您已经使用直接 Gtk 调用编写了应用程序。

FWIW,我认为这是错误的道路。除非你的目标是只提供GTK+2的非常旧的系统,否则GTK+3是你要走的路。GTK+3 于 2011 年发布(我写这篇文章时是 9 年前(,从那时起 GTK+2 就处于维护模式。一旦 GTK+4 发布(如果一切顺利,将在 2020 年的某个时候发布(,那么 GTK+2 将不再被维护。

所以正确的问题应该是"GTK+3和/或GTK+4?"。

使用GtkBuilder为您完成大部分界面构建工作并分解。对于服装部分,您可以在编译时测试内容:

#if GTK_VERSION(3, 22, 0)
// code neeeding GTK+ >= 3.22.0
#endif

或者只是使用单独的代码分支,以便您可以制作特定于 GUI 的内容,同时仍然能够合并非 UI 相关的代码。