Использование LCL в fpc
Модератор: Модераторы
-
darkpenguin
- новенький
- Сообщения: 26
- Зарегистрирован: 09.06.2017 18:23:32
Использование LCL в fpc
Как иcпользовать LCL в fpc ?
Я ищу ответ на вопрос, как собирать проекты Lazarus на "голом" fpc. Нашёл упоминание о FAQ, который давно удалён; нашёл статью на вики, которая только под винду и с пометкой что "так больше не работает". Попробовал применить то что в ней написано - нашёл, где у меня LCL, создал симлинк в папке с либами fpc, указал пути через этот симлинк - не помогло.
Я сделал простой Hello World с одним окошком и кнопкой на Lazarus, и пытаюсь его собрать. fpc говорит, что не может найти unit Interfaces. Но ведь Lazarus использует тот же самый fpc, просто "правильно настроенный"? Значит, должно быть можно найти, как он настроен, и сделать так же?
(UPD.: Решение нашёл, статью переписал для всех систем и актуального состояния: Using LCL without Lazarus )
Я ищу ответ на вопрос, как собирать проекты Lazarus на "голом" fpc. Нашёл упоминание о FAQ, который давно удалён; нашёл статью на вики, которая только под винду и с пометкой что "так больше не работает". Попробовал применить то что в ней написано - нашёл, где у меня LCL, создал симлинк в папке с либами fpc, указал пути через этот симлинк - не помогло.
Я сделал простой Hello World с одним окошком и кнопкой на Lazarus, и пытаюсь его собрать. fpc говорит, что не может найти unit Interfaces. Но ведь Lazarus использует тот же самый fpc, просто "правильно настроенный"? Значит, должно быть можно найти, как он настроен, и сделать так же?
(UPD.: Решение нашёл, статью переписал для всех систем и актуального состояния: Using LCL without Lazarus )
Последний раз редактировалось darkpenguin 13.06.2017 17:42:18, всего редактировалось 1 раз.
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Дорогая редакция!
Я ищу ответ на вопрос, как собрать самолет Cessna 172 на велосипедном заводе. Я нашел куроводство по сборке самолетов "Фарман" образца 1914-го года на таком заводе, но он у меня не собирается. Как мне правильно настроить станки?
Я ищу ответ на вопрос, как собрать самолет Cessna 172 на велосипедном заводе. Я нашел куроводство по сборке самолетов "Фарман" образца 1914-го года на таком заводе, но он у меня не собирается. Как мне правильно настроить станки?
-
darkpenguin
- новенький
- Сообщения: 26
- Зарегистрирован: 09.06.2017 18:23:32
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
darkpenguin, можно один вопрос? А смысл?
Так-то можно распотрошить Лазаря и посмотреть как оно работает, но вот гарантировать, что в LCL нет зависимостей с оставшимся кодом нельзя. Да и трудоемкость работы зашкаливает -- легче написать новое IDE или даже использовать Win/Lin API
Так-то можно распотрошить Лазаря и посмотреть как оно работает, но вот гарантировать, что в LCL нет зависимостей с оставшимся кодом нельзя. Да и трудоемкость работы зашкаливает -- легче написать новое IDE или даже использовать Win/Lin API
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
В том-то и дело, что смысла никакого.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Снег Север, если только в познавательных целях)))
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
в познавательных целях можно поизучать fpcup или скрипты СТ...
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Снег Север, может, человек хочет изучить что-то действительно сложное.
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
смысл может быть в автоматических ежедневных билдах, или автоматическом тестировании, т.е. когда надо это дело поместить на сервер где возможно нет графического интерфейса.
я может что-то подзабыл (лет 8 наверное не программировал на паскале...), но interfaces это юнит самого Lazarus, если глянуть его фактическое содержание, то он почти пустой, полагаю он там просто для совместимости с проектами на Delphi остался...
глубоко в настройках проекта в Lazarus можно найти опции компилятора - Проект / параметры проекта / показать параметры - указанные там пути надо и прочие опции надо включить при компиляции. Так же замечу, что компиляция в Lazarus состоит не только из юнитов, но еще и из ресурсов которые надо компилировать отдельной программой (если не ошибаюсь это fpcres). Копать возможно надо в сторону экспорта Makefile-а, если подобный экспорт вообще есть в Lazarus
darkpenguin писал(а):Я сделал простой Hello World с одним окошком и кнопкой на Lazarus, и пытаюсь его собрать. fpc говорит, что не может найти unit Interfaces. Но ведь Lazarus использует тот же самый fpc, просто "правильно настроенный"? Значит, должно быть можно найти, как он настроен, и сделать так же?
я может что-то подзабыл (лет 8 наверное не программировал на паскале...), но interfaces это юнит самого Lazarus, если глянуть его фактическое содержание, то он почти пустой, полагаю он там просто для совместимости с проектами на Delphi остался...
глубоко в настройках проекта в Lazarus можно найти опции компилятора - Проект / параметры проекта / показать параметры - указанные там пути надо и прочие опции надо включить при компиляции. Так же замечу, что компиляция в Lazarus состоит не только из юнитов, но еще и из ресурсов которые надо компилировать отдельной программой (если не ошибаюсь это fpcres). Копать возможно надо в сторону экспорта Makefile-а, если подобный экспорт вообще есть в Lazarus
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
shade писал(а):смысл может быть в автоматических ежедневных билдах, или автоматическом тестировании, т.е. когда надо это дело поместить на сервер где возможно нет графического интерфейса.
Для примера, сам лазарус превосходно собирается и голым fpc...
shade писал(а):глубоко в настройках проекта в Lazarus...
Заодно стоит заглянуть в параметры перекрытия... вспомнить, что компоненты регистрируются в среде и это придется как-то эмулировать или экранировать...Хотя вначале придется разобраться с файлом конфигурации Лазаруса.
shade писал(а):Копать возможно надо в сторону экспорта Makefile-а, если подобный экспорт вообще есть в Lazarus
Вроде как нету((
Фактически, Лазарус и есть библиотека LCL + программа упрощающая ее использование.
shade писал(а):Так же замечу, что компиляция в Lazarus состоит не только из юнитов, но еще и из ресурсов которые надо компилировать отдельной программой
Можно создавать, при желании, все в рунтайме. Тогда ресурсы не так важны.Конечно, в больших объемах это как ежик и кактус, но это вполне можно упростить. И в итоге придем к эмуляции функций Лазаруса.
-
darkpenguin
- новенький
- Сообщения: 26
- Зарегистрирован: 09.06.2017 18:23:32
Лекс Айрин писал(а):Так-то можно распотрошить Лазаря и посмотреть как оно работает, но вот гарантировать, что в 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 писал(а):а LCL - это просто библиотека, и проекты Lazarus - это обычные программы на Free Pascal.
не просто библиотека, нужно как минимум организовать нить(Loop) для главной формы + ловить оконные сообщения, иначе клик прое...пропустите.. И емулировать все это хозяйство кроссплатформенно в gtk/Qt.
Добавлено спустя 7 минут 23 секунды:
LCL - это наследование от TWinControl - которое тесно связанно с Windows API, так Widget X11, gtk, Xos ..
Последний раз редактировалось olegy123 10.06.2017 21:21:41, всего редактировалось 1 раз.
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
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, хотя пытался несколько раз, потому что мне не хватало такого графического подхода, когда большую часть программы можно написать мышкой
FreePascal сам имеет много хороших модулей, вроде есть биндинги для Qt/GTK и многих других библиотек (на крайний случай можно самому их сделать), его можно использовать с make, autotools, может быть с cmake и/или qmake и т.п.
но Lazarus и LCL это прежде всего возможность программировать кликая мышкой...
-
darkpenguin
- новенький
- Сообщения: 26
- Зарегистрирован: 09.06.2017 18:23:32
Я как раз только что закончил изучать Autotools, и после этого идея ставить IDE, чтобы нажать там "Скомпилировать", кажется мне особенно монструозным. Кстати, у Lazarus ЕСТЬ поддержка Makefile и даже сборки DEB-пакета (через плагин), и ещё я недавно видел что-то про паскалевский Makefile.fpc... И всё это нужно не для того чтобы РАЗРАБАТЫВАТЬ программу, а для того чтобы СОБРАТЬ её на системе у пользователя!
У нас, в мире свободного софта, не принято распространять просто "исполняемый файл". Он не запустится у меня на Raspberry Pi, и он не позволит использовать те возможности, которые даёт cmake или Autotools.
make ничего не собирает, он вызывает то что надо для сборки чего надо. В моём случае - fpc, а в вашем - Lazarus. =P
Она есть. Причём, о ней упоминаний столько, что даже мне в мой практически первый день с Lazarus странно, что кто-то ещё не знает...
PS. Я разобрался с этим вопросом и всё описал в той статье - и для чего это нужно, и как это сделать, и как оно работает и что из себя представляет.
shade писал(а):исполняемый файл не требует ни IDE, ни каких-либо компонент из неё, в отличие например других решений вроде Qt или .Net framework
У нас, в мире свободного софта, не принято распространять просто "исполняемый файл". Он не запустится у меня на Raspberry Pi, и он не позволит использовать те возможности, которые даёт cmake или Autotools.
shade писал(а):Теоретически всё можно собрать голым make
make ничего не собирает, он вызывает то что надо для сборки чего надо. В моём случае - fpc, а в вашем - Lazarus. =P
shade писал(а):PS: Ну а сборка без запуска среды, я думаю была бы полезной, странно что её нет...
Она есть. Причём, о ней упоминаний столько, что даже мне в мой практически первый день с Lazarus странно, что кто-то ещё не знает...
PS. Я разобрался с этим вопросом и всё описал в той статье - и для чего это нужно, и как это сделать, и как оно работает и что из себя представляет.
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Какая-то совершенно дикая концепция - поставлять 100+ Мб исходников и сам fpc для пересборок и при этом экономить на IDE. Мне такого не понять...
ЗЫ.
Немного дополню - почему я считаю концепцию "дикой". Потому, что проект лазаруса - это в 99.99% случаев - визуальный проект. Править таковой не в IDE, а на коленке - это извращение полнейшее. Соответственно, пересборка проекта без лазаруса никому не нужна, что хорошо подтверждается и тем, что вики-статью никто не правил годами, хотя она и устарела.
ЗЫ.
Немного дополню - почему я считаю концепцию "дикой". Потому, что проект лазаруса - это в 99.99% случаев - визуальный проект. Править таковой не в IDE, а на коленке - это извращение полнейшее. Соответственно, пересборка проекта без лазаруса никому не нужна, что хорошо подтверждается и тем, что вики-статью никто не правил годами, хотя она и устарела.
