Можно ли скомпилировать приложение Gtk + для работы на Gtk 2 и 3? - PullRequest
1 голос
/ 30 января 2020

Я хотел создать приложение, которое будет работать в средах Gtk 2 и Gtk 3. Какие у меня варианты?

  • Есть два отдельных проекта?
  • Есть два отдельных этапа сборки?
  • Можно ли собрать один исполняемый файл, чтобы он мог запускаться? в обеих средах?

Я использую C ++ с cmake на машине linux.

Ответы [ 2 ]

1 голос
/ 30 января 2020
  • Есть два отдельных проекта?

Конечно, это вариант.

  • Есть два отдельных этапа сборки?

Это тоже, но ключевая цель - создать два разных двоичных файла (хотя не обязательно оба автономных исполняемых файла, см. Ниже).

  • Можно ли построить один исполняемый файл, чтобы он мог работать в обеих средах?

Да, но это не так просто. Каждый создаваемый вами двоичный файл будет связан с определенной библиотекой c. Иначе быть не может, потому что между библиотеками v2 и v3 возникают коллизии имен.

Однако, если вы хотите абстрагироваться от использования Gtk, чтобы обеспечить подключаемые серверные части, вы можете предоставить оба Gtk + 2 и Gtk + 3 бэкэнда. И другие тоже. Но это нетривиально, особенно если вы уже написали приложение с прямыми вызовами Gtk.

0 голосов
/ 31 января 2020

FWIW, я думаю, что это неправильный путь. Если вы не нацелены на очень старые системы, которые поставляют только GTK + 2, GTK + 3 - это путь к go. GTK + 3 был выпущен в 2011 году (9 лет go, как я пишу), и с тех пор GTK + 2 находится в режиме обслуживания. Как только GTK + 4 будет выпущен (где-то в 2020 году, если что-то будет go хорошо), тогда GTK + 2 больше не будет поддерживаться.

Так что правильным вопросом должно быть «GTK + 3 и / или GTK + 4? ".

Используйте GtkBuilder, чтобы большая часть работы по созданию интерфейса была сделана для вас и выверена. В части компиляции вы можете проверить вещи во время компиляции:

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

или просто использовать отдельную ветвь кода, чтобы вы могли сделать GUI специфицированные c вещи, в то же время сохраняя возможность объединения UI-зависимый код.

...