Gtk+ 应用程序能否在 Gtk 2 和 3 上编译为 运行

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

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

我在 linux 机器上使用 C++ 和 cmake

  • Have two separate projects?

当然可以。

  • Have two separate build steps?

这也是,但是关键 objective 会生成 两个不同的二进制文件 (但不一定是两个独立的可执行文件,请参见下文)。

  • Can a single executable be built so that it is able to run on both environments?

是的,但这样做并不简单。您构建的每个二进制文件都将链接到一个特定的库。否则不能,因为 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 and/or GTK+4 ?"。

使用 GtkBuilder 为您完成大部分界面构建工作并分解出来。对于comportment部分,你可以在编译时测试一下:

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

或者只使用一个单独的代码分支,这样你就可以制作 GUI 特定的东西,同时仍然能够合并非 UI 依赖的代码。