Использование LCL в fpc

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Использование LCL в fpc

Сообщение darkpenguin » 09.06.2017 19:49:22

Как иcпользовать LCL в fpc ?

Я ищу ответ на вопрос, как собирать проекты Lazarus на "голом" fpc. Нашёл упоминание о FAQ, который давно удалён; нашёл статью на вики, которая только под винду и с пометкой что "так больше не работает". Попробовал применить то что в ней написано - нашёл, где у меня LCL, создал симлинк в папке с либами fpc, указал пути через этот симлинк - не помогло.

Я сделал простой Hello World с одним окошком и кнопкой на Lazarus, и пытаюсь его собрать. fpc говорит, что не может найти unit Interfaces. Но ведь Lazarus использует тот же самый fpc, просто "правильно настроенный"? Значит, должно быть можно найти, как он настроен, и сделать так же?

(UPD.: Решение нашёл, статью переписал для всех систем и актуального состояния: Using LCL without Lazarus )
Последний раз редактировалось darkpenguin 13.06.2017 18:42:18, всего редактировалось 1 раз.
darkpenguin
новенький
 
Сообщения: 26
Зарегистрирован: 09.06.2017 19:23:32

Re: Использование LCL в fpc

Сообщение Снег Север » 10.06.2017 06:57:08

Дорогая редакция!
Я ищу ответ на вопрос, как собрать самолет Cessna 172 на велосипедном заводе. Я нашел куроводство по сборке самолетов "Фарман" образца 1914-го года на таком заводе, но он у меня не собирается. Как мне правильно настроить станки?
Аватара пользователя
Снег Север
энтузиаст
 
Сообщения: 940
Зарегистрирован: 27.11.2007 16:14:47

Re: Использование LCL в fpc

Сообщение darkpenguin » 10.06.2017 13:28:58

Не очень информативный ответ. :)

Вот правильный ответ: Using LCL in pure FPC
darkpenguin
новенький
 
Сообщения: 26
Зарегистрирован: 09.06.2017 19:23:32

Re: Использование LCL в fpc

Сообщение Лекс Айрин » 10.06.2017 13:54:35

darkpenguin, можно один вопрос? А смысл?

Так-то можно распотрошить Лазаря и посмотреть как оно работает, но вот гарантировать, что в LCL нет зависимостей с оставшимся кодом нельзя. Да и трудоемкость работы зашкаливает -- легче написать новое IDE или даже использовать Win/Lin API
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 3924
Зарегистрирован: 19.02.2013 16:54:51

Re: Использование LCL в fpc

Сообщение Снег Север » 10.06.2017 14:19:13

В том-то и дело, что смысла никакого.
Аватара пользователя
Снег Север
энтузиаст
 
Сообщения: 940
Зарегистрирован: 27.11.2007 16:14:47

Re: Использование LCL в fpc

Сообщение Лекс Айрин » 10.06.2017 14:37:52

Снег Север, если только в познавательных целях)))
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 3924
Зарегистрирован: 19.02.2013 16:54:51

Re: Использование LCL в fpc

Сообщение Снег Север » 10.06.2017 16:27:12

в познавательных целях можно поизучать fpcup или скрипты СТ...
Аватара пользователя
Снег Север
энтузиаст
 
Сообщения: 940
Зарегистрирован: 27.11.2007 16:14:47

Re: Использование LCL в fpc

Сообщение Лекс Айрин » 10.06.2017 16:31:43

Снег Север, может, человек хочет изучить что-то действительно сложное.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 3924
Зарегистрирован: 19.02.2013 16:54:51

Re: Использование LCL в fpc

Сообщение shade » 10.06.2017 17:02:16

смысл может быть в автоматических ежедневных билдах, или автоматическом тестировании, т.е. когда надо это дело поместить на сервер где возможно нет графического интерфейса.

darkpenguin писал(а):Я сделал простой Hello World с одним окошком и кнопкой на Lazarus, и пытаюсь его собрать. fpc говорит, что не может найти unit Interfaces. Но ведь Lazarus использует тот же самый fpc, просто "правильно настроенный"? Значит, должно быть можно найти, как он настроен, и сделать так же?

я может что-то подзабыл (лет 8 наверное не программировал на паскале...), но interfaces это юнит самого Lazarus, если глянуть его фактическое содержание, то он почти пустой, полагаю он там просто для совместимости с проектами на Delphi остался...

глубоко в настройках проекта в Lazarus можно найти опции компилятора - Проект / параметры проекта / показать параметры - указанные там пути надо и прочие опции надо включить при компиляции. Так же замечу, что компиляция в Lazarus состоит не только из юнитов, но еще и из ресурсов которые надо компилировать отдельной программой (если не ошибаюсь это fpcres). Копать возможно надо в сторону экспорта Makefile-а, если подобный экспорт вообще есть в Lazarus
Аватара пользователя
shade
энтузиаст
 
Сообщения: 881
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Использование LCL в fpc

Сообщение Лекс Айрин » 10.06.2017 17:40:30

shade писал(а):смысл может быть в автоматических ежедневных билдах, или автоматическом тестировании, т.е. когда надо это дело поместить на сервер где возможно нет графического интерфейса.


Для примера, сам лазарус превосходно собирается и голым fpc...

shade писал(а):глубоко в настройках проекта в Lazarus...

Заодно стоит заглянуть в параметры перекрытия... вспомнить, что компоненты регистрируются в среде и это придется как-то эмулировать или экранировать...Хотя вначале придется разобраться с файлом конфигурации Лазаруса.

shade писал(а):Копать возможно надо в сторону экспорта Makefile-а, если подобный экспорт вообще есть в Lazarus


Вроде как нету((

Фактически, Лазарус и есть библиотека LCL + программа упрощающая ее использование.

shade писал(а):Так же замечу, что компиляция в Lazarus состоит не только из юнитов, но еще и из ресурсов которые надо компилировать отдельной программой

Можно создавать, при желании, все в рунтайме. Тогда ресурсы не так важны.Конечно, в больших объемах это как ежик и кактус, но это вполне можно упростить. И в итоге придем к эмуляции функций Лазаруса.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 3924
Зарегистрирован: 19.02.2013 16:54:51

Re: Использование LCL в fpc

Сообщение darkpenguin » 10.06.2017 21:47:16

Лекс Айрин писал(а):Так-то можно распотрошить Лазаря и посмотреть как оно работает, но вот гарантировать, что в LCL нет зависимостей с оставшимся кодом нельзя. Да и трудоемкость работы зашкаливает -- легче написать новое IDE или даже использовать Win/Lin API

Когда мы собираем из исходников какую-нибудь маленькую утилитку, мы не ставим IDE, который её разработчик пользовался при создании. Мы ставим только компилятор - ну, и ещё обычно make .
Lazarus - это просто IDE; не должно быть обязательно заставлять пользователей её ставить.
LCL - это другое дело; единственное, что тут удивительно - почему LCL до сих пор официально распространяется только одним пакетом с Lazarus, а не отдельно. Но неофициально - в репозиториях как минимум Debian и Raspbian - она отдельно.

shade писал(а):смысл может быть в автоматических ежедневных билдах, или автоматическом тестировании, т.е. когда надо это дело поместить на сервер где возможно нет графического интерфейса.

Именно! Или просто при распространении пакета, чтобы не заставлять юзера ставить весь IDE. Хотя достаточно просто того что я хотел бы понимать, что именно делает IDE, когда я нажимаю "собрать", а также убедиться, что если я использую Lazarus для разработки программы - она не перестаёт от этого быть программой на Паскале (а не на Лазарусе), и быть теоретически потенциально совместима с другими компиляторами Паскаля.

Я могу и ошибаться (ибо тоже много лет не занимался этим и вот только сейчас решил вернуться), но Lazarus, как и другие IDE, для компиляции просто вызывает fpc безо всяких премудростей. Так что вызвать fpc вручную без помощи Lazarus - это естественная и официально поддерживаемая возможность. В качестве подтверждения, наверное, достаточно того что сам Lazarus, действительно, компилируется самим fpc .

Я переписал статью на их Вики на эту тему. Старая статься была только под винду, но болталась там много лет (т.е. это не просто поддерживаемая, но и давно известная возможность). Единственный вопрос был - КАК, потому что с момента написания старой статьи изменились уже даже пути в LCL, но с этим я тоже разобрался.
http://wiki.lazarus.freepascal.org/Usin ... ut_Lazarus

Возможно, практической пользы от этого немного, но достаточно того что каждый может сам проверить и убедиться, что Lazarus - это просто IDE, а LCL - это просто библиотека, и проекты Lazarus - это обычные программы на Free Pascal.
darkpenguin
новенький
 
Сообщения: 26
Зарегистрирован: 09.06.2017 19:23:32

Re: Использование LCL в fpc

Сообщение olegy123 » 10.06.2017 21:59:36

darkpenguin писал(а):а LCL - это просто библиотека, и проекты Lazarus - это обычные программы на Free Pascal.

не просто библиотека, нужно как минимум организовать нить(Loop) для главной формы + ловить оконные сообщения, иначе клик прое...пропустите.. И емулировать все это хозяйство кроссплатформенно в gtk/Qt.

Добавлено спустя 7 минут 23 секунды:
LCL - это наследование от TWinControl - которое тесно связанно с Windows API, так Widget X11, gtk, Xos ..
Последний раз редактировалось olegy123 10.06.2017 22:21:41, всего редактировалось 1 раз.
olegy123
энтузиаст
 
Сообщения: 580
Зарегистрирован: 25.02.2016 12:10:20

Re: Использование LCL в fpc

Сообщение shade » 10.06.2017 22:20:59

darkpenguin писал(а):Когда мы собираем из исходников какую-нибудь маленькую утилитку, мы не ставим IDE, который её разработчик пользовался при создании. Мы ставим только компилятор - ну, и ещё обычно make .

утверждение не совсем верное, есть разные подходы. Есть сборка через make. Есть надстройки - cmake, qmake, autotools и т.п., в каждом есть свои нюансы. В Lazarus, как и в Delphi с которого он был скопирован, LCL тесно интегрирован в среду, имеет свои уникальные особенности из-за которых использовать его отдельно от среды просто бессмысленно - лишаешь себя основной фишки этой среды - визуального программирования, которого в полной мере, в той как он был Dephi и есть теперь в Lazarus вроде бы больше нигде нет. Да, есть возможность визуально рисовать формочки в Visual Studio, да есть QtDesiner, но это не дает тех ощущений которые есть в Lazarus/Delphi.

darkpenguin писал(а): Или просто при распространении пакета, чтобы не заставлять юзера ставить весь IDE.

исполняемый файл не требует ни IDE, ни каких-либо компонент из неё, в отличие например других решений вроде Qt или .Net framework

darkpenguin писал(а):Я могу и ошибаться (ибо тоже много лет не занимался этим и вот только сейчас решил вернуться), но Lazarus, как и другие IDE, для компиляции просто вызывает fpc безо всяких премудростей.

так и есть, только надо учитывать тут среда выступает в качестве make. Теоретически всё можно собрать голым make, на практике я так понял разработчики Lazarus не поддерживают эту возможность.

darkpenguin писал(а): каждый может сам проверить и убедиться, что Lazarus - это просто IDE, а LCL - это просто библиотека, и проекты Lazarus - это обычные программы на Free Pascal.

да, это обычные программы на Free Pascal, но нет!, в Lazarus IDE и LCL это единое целое и использование одного от другого лишено смысла. Вся суть Delphi и Lazarus в визуальном программировании - все компоненты VLC/LCL имеют визуальное представление, их можно настраивать в графическом режиме не прибегая к коду. В других IDE этого нет. Если вам такой подход не нравиться, то не используйте ни Lazarus, ни LCL, и даже если вы при этом хотите программировать на Pascal, то используйте WinAPI/GTK/QT/etc...

Если вы ранее не программировали плотно в Delphi/Lazarus, то посоветовал бы для начала попробовать принять этот подход, он уникальный, очень удобный, позволяет быстро клепать графические приложения и имеет меньший порог вхождения чем в другие среды. Я после опыта с Delphi/Lazarus так и не смог себя заставить освоить Qt, я просто не понимаю, почему они не сделают программирование таким же простым как оно было в Delphi.

PS: Ну а сборка без запуска среды, я думаю была бы полезной, странно что её нет...

Добавлено спустя 17 минут 39 секунд:
Сложно менять парадигму... Я так и не смог перейти на Qt, хотя пытался несколько раз, потому что мне не хватало такого графического подхода, когда большую часть программы можно написать мышкой :D , а кому-то возможно сложно перейти на Lazarus потому что не хватает возможности работать в своем любимом редакторе и собирать программы make-ом

FreePascal сам имеет много хороших модулей, вроде есть биндинги для Qt/GTK и многих других библиотек (на крайний случай можно самому их сделать), его можно использовать с make, autotools, может быть с cmake и/или qmake и т.п.

но Lazarus и LCL это прежде всего возможность программировать кликая мышкой...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 881
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Использование LCL в fpc

Сообщение darkpenguin » 10.06.2017 22:46:57

Я как раз только что закончил изучать Autotools, и после этого идея ставить IDE, чтобы нажать там "Скомпилировать", кажется мне особенно монструозным. Кстати, у Lazarus ЕСТЬ поддержка Makefile и даже сборки DEB-пакета (через плагин), и ещё я недавно видел что-то про паскалевский Makefile.fpc... И всё это нужно не для того чтобы РАЗРАБАТЫВАТЬ программу, а для того чтобы СОБРАТЬ её на системе у пользователя!

shade писал(а):исполняемый файл не требует ни IDE, ни каких-либо компонент из неё, в отличие например других решений вроде Qt или .Net framework

У нас, в мире свободного софта, не принято распространять просто "исполняемый файл". Он не запустится у меня на Raspberry Pi, и он не позволит использовать те возможности, которые даёт cmake или Autotools.

shade писал(а):Теоретически всё можно собрать голым make

make ничего не собирает, он вызывает то что надо для сборки чего надо. В моём случае - fpc, а в вашем - Lazarus. =P

shade писал(а):PS: Ну а сборка без запуска среды, я думаю была бы полезной, странно что её нет...

Она есть. Причём, о ней упоминаний столько, что даже мне в мой практически первый день с Lazarus странно, что кто-то ещё не знает...

PS. Я разобрался с этим вопросом и всё описал в той статье - и для чего это нужно, и как это сделать, и как оно работает и что из себя представляет.
darkpenguin
новенький
 
Сообщения: 26
Зарегистрирован: 09.06.2017 19:23:32

Re: Использование LCL в fpc

Сообщение Снег Север » 11.06.2017 08:04:44

Какая-то совершенно дикая концепция - поставлять 100+ Мб исходников и сам fpc для пересборок и при этом экономить на IDE. Мне такого не понять...
ЗЫ.
Немного дополню - почему я считаю концепцию "дикой". Потому, что проект лазаруса - это в 99.99% случаев - визуальный проект. Править таковой не в IDE, а на коленке - это извращение полнейшее. Соответственно, пересборка проекта без лазаруса никому не нужна, что хорошо подтверждается и тем, что вики-статью никто не правил годами, хотя она и устарела.
Аватара пользователя
Снег Север
энтузиаст
 
Сообщения: 940
Зарегистрирован: 27.11.2007 16:14:47

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 1

Рейтинг@Mail.ru