LINUX.ORG.RU

Как готовить кроссплатформенность в GTK

 ,


0

6

Доброй ночи, ЛОР.

Ну начать с того, какую систему сборки использовать, например. Вот в Qt, если без претензий, я могу пользоваться qmake, с ней хорошо всё интегрировано, IDE и все модули. Если с претензиями - можно залезть в cmake. В двух словах: имея Qt SDK, я могу разрабатывать свой проект под линуксом, а потом быстренько сделать сборку под винду, не просиживая в ней слишком много и не затаскивая туда половину линуксового юзерспейса. С макосью чуть похуже, там для работы Qt надо ещё XCode из эппловского магазина поставить. Но больше, вроде, загонов нет.

А как бы аналогичный процесс организовать, если писать на Си с применением GTK, ну и при необходимости, других Gnome-библиотек? Требования те же - пишу под линуксом, потом собираю под виндой, желательно без боли и страданий (ну или с минимумом оных).

Посмотрел я на несколько известных GTKшных проектов. Посмотрел в первую очередь на предмет того, как их собирать под виндой. (Понятно, что в линуксе проблем будет меньше всего.)

Gnumeric - судя по исходникам, используется, Autotools. На сайте в разделе Download висит гордая надпись «We do not currently release or distribute Windows binaries». Тем не менее, в интернетах болтаются какие-то сборки гнумерика под винду, но качать их и рекомендовать знакомым виндузятникам после этого реально страшно: непонятно, кто и как их собирал.

AbiWord - снова Autotools. В документации (docs/build/BUILD.TXT) описано несколько способов сборки, причём под первым номером идёт «Diving make using MSYS and MINGW». Но я не понял, как оно работает, там же сразу в лоб предлагается запускать make, а Makefile где?

HomeBank - ну вы поняли, да. Снова Autotools, и в файлике INSTALL обычные формулировки про ./configure; make; make install. Тем не менее, сборки под винду на офсайте имеются.

Пожалуй, самая содержательная информация оказалась в исходниках GIMP. Тут тебе и инструкция по кросскомпиляции с mingw64. и манифест для Visual Studio...

Здесь анонимус наверняка спросит: а собственно, какое отношение система сборки имеет к GUI-библиотеке? Да формально, конечно, никакого. Только должны же быть какие-то best practice в виде набора не то, что бы связанных, но хотя бы проверенно не конфликтующих с собой инструментов. Ну например: ни в одном из проектов, на которые я посмотрел, не используется cmake. Это случайность или закономерность? Допускаю, что у меня выборка нерепрезентативная.

Далее: если уж при написании GTK-программ путь джедая - это autotools, есть ли какая-нибудь IDE, облегчающая с ними работу? Ну не так, как Qt Creator с qmake, допустим, ну хотя бы частично? Тот же вопрос, кстати, и к cmake относится. Там, конечно, синтаксис попроще, чем у Autotools, но всё же...

Наконец, я припоминаю, что в старых книжках по GTK рекомендовали применять Glade. Да и сейчас на хабре по нему можно найти статьи. Но насколько я понимаю, это не полноценная IDE с поддержкой Си-проекта, а именно средство визуальной разработки UI, т.е. это аналог, скорее, Qt Designer, чем Qt Creator?..

★★★★★

GTK под вендой не очень котируется, бери культи

anonymous
()

А как бы аналогичный процесс организовать, если писать на Си с применением GTK, ну и при необходимости, других Gnome-библиотек?

MinGW со всеми требуемыми пакетами Pacman-ом ставится под винду и разницы особой нет, только в конечный bundle нужно либы включать.

Но я не понял, как оно работает, там же сразу в лоб предлагается запускать make, а Makefile где?

Видимо, ./configure подразумевается...

Это случайность или закономерность?

Лицензионные и исторические причины, вероятнее всего, плюс - привычки. Мне CMake кажется более подходящим, если в список ОС включена ещё и Windows.

есть ли какая-нибудь IDE, облегчающая с ними работу? Ну не так, как Qt Creator с qmake, допустим, ну хотя бы частично?

Хз, мне Vim+CMake хватает, пишу на Vala+C, любая IDE - оковы для разработчика, имхо.

в старых книжках по GTK рекомендовали применять Glade.

Он и сейчас используется для построения форм, только вместо libglade.so в коде надо применять класс GtkBuilder.

backbone ★★★★★
()
Последнее исправление: backbone (всего исправлений: 1)

Не знаю как насчёт Си, но в свете выхода Gtk3 и Qt5, я бы вообще порекомендовал пересаживаться на FOX toolkit (Wx или Fltk).

Что касается кроссплатформенной и удобной IDE, то на сегодня это только Lazarus, но, как понимаешь, это паскаль.

Glade - это всего лишь клепатель xml-файлов, в которых описывается начальная структура виджетов Gtk. Назвать её IDE нельзя, весь код (включая обработчики событий) всё равно придётся писать в редакторах кода. Лично я от Glade вобще отказался и создаю виджеты в коде, ибо от неё больше гемора, чем пользы.

Novator ★★★★★
()

А в чём проблема использовать autotools? На винде ими тоже всё прекрасно компиляется

Harald ★★★★★
()

Если основная платформа линукс, то под винду удобнее будет кросскомпилировать.

iliyap ★★★★★
()
Ответ на: комментарий от anonymous

Cтавишь cygwin, в нём устанавливаешь пакеты autoconf, automake, mingw-w64 и прочие нужные зависимости, запускаешь ./configure с нужными параметрами и люто-неистово конпеляешь

Harald ★★★★★
()
Ответ на: комментарий от anonymous

Более того, можно и мелкософтовским компилятором автотулзами собирать. Но поредактировать сборочные скрипты придётся конечно

Harald ★★★★★
()

Далее: если уж при написании GTK-программ путь джедая - это autotools, есть ли какая-нибудь IDE, облегчающая с ними работу? Ну не так, как Qt Creator с qmake, допустим, ну хотя бы частично? Тот же вопрос, кстати, и к cmake относится. Там, конечно, синтаксис попроще, чем у Autotools, но всё же...

у Qt Creator-а вроде бы есть плагин для импорта autotools проектов

Harald ★★★★★
()
Ответ на: комментарий от backbone

Видимо, ./configure подразумевается...

Ну он может подразумеваться под юниксами, это юниксовый скрипт. А с виндой как?

мне Vim+CMake хватает, пишу на Vala+C

А как у них разделяются роли, что целесообразнее писать на Vala, что на C? Про Vala я просто ничего, кроме названия не знаю.

любая IDE - оковы для разработчика, имхо.

Знаешь, мне довелось довольно долгое время всё, кроме собственно UI, писать в mcedit. В принципе, ничего, нормально писал. И в отдельных случаях - да, отдельный редактор может быть удобнее IDE, если надо подправить какой-то локальный кусок кода.

Но теперь я таки пишу в Qt Creator и не жалею. Есть довольно много дурной работы, которая в IDE выполняется тупо быстрее: создание заготовок для классов/модулей, внесение соответствующих изменений в файл проекта, создание заготовки тела функции по её объявлению, синхронная правка объявления и реализации, переход к функции с места её использования и т.д. Да, всё это можно сделать руками, но лучше сэкономленное время потратить на написание содержательного кода. Я, правда, не знаю, возможно, всё, перечисленное мной, делается в vim...

hobbit ★★★★★
() автор топика
Ответ на: комментарий от Novator

Что касается кроссплатформенной и удобной IDE, то на сегодня это только Lazarus

Он же ведь похож на Delphi 5-7? Ну не знаю, Qt Creator вполне сопоставим с ней по удобству. Что-то лучше, что-то хуже...

но, как понимаешь, это паскаль.

Сам по себе паскаль меня не пугает. Особенно в свете того, что в C++ так и не завезли нормальных модулей, хотя, вроде, недавно собирались. А в паскале они года так с 90-го.

Проблема в другом. Если я пишу опенсорсную кроссплатформенную софтину - то вендузятникам-то пофиг, они с сайта проекта скачают. А вот у линуксовой сборки, как я понимаю, шансы попасть в официальные репозитории популярных дистрибутивов резко падают, если программа написана на «экзотическом» языке, тащит за собой соответствующие библиотеки и требует от мейнтейнера держать соответствующий компилятор. И тут паскаль, увы, в проигрышном положении.

hobbit ★★★★★
() автор топика
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

Ну он может подразумеваться под юниксами, это юниксовый скрипт. А с виндой как?

точно так же

Harald ★★★★★
()
Ответ на: комментарий от iliyap

Если основная платформа линукс, то под винду удобнее будет кросскомпилировать.

Я уже задумывался о таком варианте, да и опыт авторов GIMP намекает. Но во-первых, без винды всё равно не обойдёшься: потестировать программу всё равно надо, а wine тут не лучший вариант.

Во-вторых, для кросс-компиляции, как я понимаю, надо тщательно настраивать среду. Надо, видимо, в линуксе, поставить GTK для Windows, а то и собрать из исходников. Что опять-таки в случае кросс-компиляции предпочтительно, автотулзы или cmake? И что в обоих случаях писать в конфиги... Есть на эту тему какие-нибудь хорошие мануалы?

hobbit ★★★★★
() автор топика

Вообще, у меня есть ещё как минимум одна причина предпочесть Qt, правда, к кроссплатформенности она прямого отношения уже не имеет. Все современные оконные UI имеют объектно-ориентированную природу. Даже у микрософта, кажется, где-то мелькал перл, что «окно - это объект в памяти, которому вероятно, соответствует область на экране».

А оконную концепцию, ИМХО, удобнее реализовать на «языке с классами», а не на Си. В случае Qt имеем иерархию классов и при необходимости перекрываем нужные методы. В случае GTK, как я вижу по примерам - множество глобальных функций с длинными и похожими друг на друга именами...

hobbit ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Ну он может подразумеваться под юниксами, это юниксовый скрипт. А с виндой как?

Да вроде так же, msys_shell, pkg-config, make, MinGW - всё то же самое.

А как у них разделяются роли, что целесообразнее писать на Vala, что на C? Про Vala я просто ничего, кроме названия не знаю.

C только там, где возможности Vala ограничены, т.е. редкие исключения.

Знаешь, мне довелось довольно долгое время всё, кроме собственно UI, писать в mcedit. В принципе, ничего, нормально писал. И в отдельных случаях - да, отдельный редактор может быть удобнее IDE, если надо подправить какой-то локальный кусок кода.

Похоже, это вопрос привычек. Мне Vim и хороший shell ни одна IDE не заменит.

в IDE выполняется тупо быстрее: создание заготовок для классов/модулей, внесение соответствующих изменений в файл проекта, создание заготовки тела функции по её объявлению, синхронная правка объявления и реализации, переход к функции с места её использования и т.д ... Я, правда, не знаю, возможно, всё, перечисленное мной, делается в vim...

Не знаю почему, но с каждым годом отчего-то хочется меньше писать «быстрый» код. И время на собственно набор текста становится пренебрежимо малым. Так то, для поиска - grep, для массового редактирования - sed тоже годятся.

В случае GTK, как я вижу по примерам - множество глобальных функций с длинными и похожими друг на друга именами...

Vala, к слову, разделяет длинные имена на namespace-ы.

backbone ★★★★★
()

Не так давно третьи GTK под виндой работали никак, только недавно судя по их сайту это пофиксили. Про уровень боли не скажу, но подозреваю что он высок по прежнему, т.к. портированием занималось мало людей мало времени. Glade это не IDE, а именно UI рисовать, даже без правки кода, но опять контролов и их настроек раз два и обчелся, многое надо делать ручками из кода.

peregrine ★★★★★
()

А этот гражданин, который DeaDBeeF пилит, разве не на GTK его собирает под все? Кастоните кто-нить, я забыл его юзернейм.

anonymous
()
Ответ на: комментарий от hobbit

Vala медленно развивается, я пробовал, на сишный код, который генерируется из vala сыпется куча ворнингов из-за того, что разработчики vala с трудом успевают обновлять свои биндинги под современный GTK и в результате обернуто полно устаревших функций, которые будут выпилены в следующих версиях GTK. Я не уверен, что vala не загнется в общем. Ну и обертки не всегда хорошие (не 100% того что можно сделать с C можно сделать с Vala, по крайней мере без геморроя).

peregrine ★★★★★
()
Ответ на: комментарий от anonymous

DeaDBeeF вроде не умеет под винду. По крайней мере вот так слету сборку не нашел.

anonymous
()
Ответ на: комментарий от anonymous

Под маки он пилил GUI на Coca, а под винду DeaDBeeF-а нет.

peregrine ★★★★★
()
Ответ на: комментарий от hobbit

Delphi

Тогда уж лучше mono/net core + xwt, имхо

anonymous
()

Понятно, что в линуксе проблем будет меньше всего

Ты правильно понимаешь. Поэтому виндовые сборки надо делать под линуксом. glib, gtk, pango и прочее при этом лучше брать уже прекомпидленные, cross-mingw32 достать тоже не проблема. После этого (ты не поверишь!) ./confgure CC=mingw32 && make.

Сам сдавал лабы именно так.

kawaii_neko ★★★★
()

ну, значит, тебе путь в MinGW+MSYS или Cygwin. там autotools нормально (почти) фунциклируют. если ты попробуешь потащить это в вендозную среду, будет страшный гемор с переписыванием кучи Makefile'ов.

а так, из кроссплатформы без Qt удобно юзать CMake. можешь попробовать boost v2 build. там своя философия, но сишные файлы им вполне можно собирать, и кроссплатформа там хорошо поддержана. но к нему надо привыкнуть и довольно долго в него въезжать.

в качестве IDE для кроссплатформенных проектов я лично использовала CodeBlocks. его тут ругают, но он лучше всех прочих заточен под кроссплатформу и даже какие-то зайчатки поддержки проектов с Gtk в нём я видела (хотя и не юзала никогда). он удобен тем, что у него один проект на все платформы и в него можно докрутить любые компиляторы, навесить на сборку любые скрипты. в общем, какие хочешь извращения, по желанию. но в последние годы там завелись говнокодеры и проект стал реально развиваться куда-то не туда. однако, существующих стабильных версий вполне хватает для разработки.

да, из DE есть ещё Eclipse. хотя он жирный и тяжёлый, я лично его почему-то недолюбливаю. но в нём есть плагины для работы с сишными проектами и он умеет экспортировать в CMake.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 2)

Собирай вендоверсию под линуксом. Кросс-компилятором mingw32/64.

Stanson ★★★★★
()
Ответ на: комментарий от hobbit

Для GTK есть отличная обертка на плюсах - gtkmm. Советую обратить внимание.

anonymous
()
Ответ на: комментарий от hobbit

для кросс-компиляции, как я понимаю, надо тщательно настраивать среду. Надо, видимо, в линуксе, поставить GTK для Windows, а то и собрать из исходников.

Для кросс-компиляции проектов использующих такие системы сборки как Autotools, CMake, Qt, Makefile, OSG существует хорошо развитый инструмент - MXE https://github.com/mxe/mxe. Список поддерживаемых библиотек http://mxe.cc/build-matrix.html

anonymous
()
Ответ на: комментарий от anonymous

на GTK его собирает под все

DeaDBeef нет под Windows.

anonymous
()

Вендузятник должен страдать.

anonymous
()
Ответ на: комментарий от peregrine

Wx то чем маргинален? Вполне себе зрелая штука... да и FLTK с FOX ничё так. FLTK надо патчить, а по FOX не густо с документацией, но оба вполне себе ничего, не сильно маргинальны )

xterro ★★★★★
()
Ответ на: комментарий от peregrine

Glade это не IDE, а именно UI рисовать, даже без правки кода, но опять контролов и их настроек раз два и обчелся, многое надо делать ручками из кода.

Речь именно про Glade или в обо всей инфраструктуре gtkbuilder?

Каких контролов и настроек не хватает?

nvl ★★★
()
Ответ на: комментарий от xterro

Ну начать с того, что Wx это обертка над GTK2 (была ещё и над голым X11, но она не полная и ещё более маргинальная), а GTK2 - маргинален.

peregrine ★★★★★
()
Ответ на: комментарий от anonymous

про deadbeef.. он не очень кроссплатформенный.. под каждую OS используются разные UI-тулкиты, и разные системы сборки. *nix autotools/gtk, macos xcode/cocoa, android make+gradle+ndk-build/свой тулкит. *nix версию с GTK можно собирать под несколько платформ, в т.ч. macos и win. под винду официальные исходники не собираются, но есть форк где-то на гитхабе, который можно собрать и запустить с некоторым трудом. последний раз когда я смотрел, в нем еще не было звука. найти его щас не смог.

waker ★★★★★
()
Ответ на: комментарий от anonymous

автотулзы ещё тебя переживут, анонимус

Harald ★★★★★
()
Ответ на: комментарий от hobbit

Есть mxe, в котором все есть для кросскомпиляции как qt так и gtk.

Gorthauer ★★★★★
()
Ответ на: комментарий от peregrine

Когда обернули?

«Support for GTK+ 3 is available starting with wxWidgets 2.9.4, use configure option –with-gtk=3 to enable it.»

anonymous
()

Раз под оффтоп, то

  • mingw - в топку. Его недопортированные стандартные библиотеки только мозг парят. Под оффтоп стоит использовать только MSVC, который в качестве компилятора и бесплатный есть.
  • Autotools - в топку. CMake для кросскомпиляции гораздо лучше подходит.

З.Ы.: GTK для кросскомпиляции - в топку. Есть Qt с невырвиглазным GUI для остальных платформ.

AlexVR ★★★★★
()

есть ли какая-нибудь IDE, облегчающая с ними работу? ... Тот же вопрос, кстати, и к cmake относится.

CMake понимают много всяких недо-IDE. Тот же code::blocks. Но у тебя же:

я могу разрабатывать свой проект под линуксом, а потом быстренько сделать сборку под винду

AlexVR ★★★★★
()
Ответ на: комментарий от AlexVR

CMake понимают много всяких недо-IDE. Тот же code::blocks.

А кстати, спасибо за наводку. в CB я когда-то что-то делал, но это было ОООЧЕНЬ давно, и кажется, cmake он ещё не поддерживал...

hobbit ★★★★★
() автор топика
Ответ на: комментарий от AlexVR

mingw - в топку.

Какой из? Есть классический MinGW, а есть новый MinGW-w64. Бинари, собранные с помощью MinGW, без проблем работают на том же Windows XP. А с MSVC замучаешься собирать под старые винды. Тот же Qt Creator на официальном сайте, который собирают студией, уже не работает на Windows XP.

Autotools - в топку. CMake для кросскомпиляции гораздо лучше подходит.

Тут, соглашусь пожалуй. С одного пинка можно сделать MSYS/MinGW Makefiles или проект для студии.

Есть Qt с невырвиглазным GUI для остальных платформ.

Исключая macOS, там Qt получается вырвиглазненьким больно.

EXL ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.