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 依赖的代码。
我想构建一个在 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 依赖的代码。