Компилирование из командной строки

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

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

azatsh
новенький
Сообщения: 33
Зарегистрирован: 20.07.2010 10:14:04

Компилирование из командной строки

Сообщение azatsh »

пишу на Ubuntu 10.4 fpc 2.4.0
Есть проект с использованием OpenGl. В IDE Lazarus все прекрасно компилируется и работает.
Но если попытаться скомпилировать через комантдную строку выдает User defined: this LCL widgetset/OS is not yet supported. что значит дефайн OpenGLTargetDefined не объявлен.
в терминал пишу следующее
/usr/bin/fpc -B -Mdelphi -Tlinux -Fu"Сюда пишу модули" "путь к lpr файлу"
-Fi"" в fpc.cfg записаны

такое чувство что lazarus что-то еще передает. Как-то объявляет дефайны
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

azatsh
Открой для себя LazBuild - все сразу будет хорошо.
http://freepascal.ru/article//lazarus/20090224211328/
azatsh
новенький
Сообщения: 33
Зарегистрирован: 20.07.2010 10:14:04

Сообщение azatsh »

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

Дело в том, что проект кросплатформенный. поэтому мне нужно компилировать не читая эти файлы.
У меня под виндами все отлично работает а вот линуксе проблемма возникла
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

User defined: this LCL widgetset/OS is not yet supported. что значит дефайн OpenGLTargetDefined не объявлен.

это значит что под виджесет по умолчанию не может быть скомпилирован TOpenGLControl.
надо указать компилятору совместимый виджесет, тока я не в курсе как))

Код: Выделить всё

  Abstract:
    TOpenGLControl is a LCL control with an opengl context.
    It works under the following platforms:
      - gtk with glx    : full
      - gtk2 with glx   : full
      - carbon with agl : full
      - cocoa           : no
      - windows with wgl: full
      - wince           : no
      - qt with glx     : no (started)
      - fpgui with glx  : no
      - nogui           : no 
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

стоит посмотреть на проект doublecmd... там этот момент разобран по полочкам
azatsh
новенький
Сообщения: 33
Зарегистрирован: 20.07.2010 10:14:04

Сообщение azatsh »

Как собирать LCL проекты без Lazarus-а?

* В тех случаях, когда использование графической среды невозможно, вы можете воспользоваться утилитой командной строки: lazbuild.

Эта утилита используется для сборки проектов и lazarus-пакетов (packages).

* Если вам нужно собрать LCL приложение без среды разработки и не используя lazbuild, вам необходимо добавить следующие строки в файл fpc.cfg

# строчки начинающиеся с # можно не добавлять
# это комментарии
# пути для других модулей и компонентов
-Fu{Пусть_к_лазарусу}/lcl/units/{целевая_система}
-Fu{Пусть_к_лазарусу}/components/units/{целевая_система}

Где {целевая_система} это системный префикс, указывающий для какой системы располагаются модули. Обычно этот префикс представляет собой пару имён "Процессор-ОСь", например i386-win32, i386-linux, i386-darwin.:

После добавления этих строк в конфигурационный файл, вызовете команду: fpc myproject.lpr myproject.lpr это имя основного файла проекта (модуль начинающийся с "program" или "library"). Но имя может быть другим, т.к. Лазарус не принуждает Вас использовать расширение .lpr.

Кроме того, если Ваш проект использует какие-либо особые настройки, вы можете получить командную строку для компиляции, используя меню в Лазарусе: Проект->Параметры проекта...->Показать параметры (параметров может быть очень много, удобно скопировать их в отдельный скрипт файл .bat или .sh);

Это сказано на faq лазаруса. Но у меня все прописано
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

предлагаю собственно создать разные LPI, содержащие разные параметры для разных типов сборки, но одни и те же исходники.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

hinst
Можно узнать зачем?
Вроде бы никто не мешает оставить их пустыми. В этом случае fpc сам определит под какую архитектуру его нужно собрать, если это не кросскомпиляция
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

чтобы с удобством использовать LAZBUILD и при этом собирать свой проект для разных платформ
вот же вроде чувак пишет
Дело в том, что проект кросплатформенный.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

А как вы используете OpenGL? Это компонент или файл с объявлением функций и процедур?
Просто если это компонент, то боюсь что без lazbuild вам не обойтись
azatsh
новенький
Сообщения: 33
Зарегистрирован: 20.07.2010 10:14:04

Сообщение azatsh »

А как вы используете OpenGL? Это компонент или файл с объявлением функций и процедур?
Просто если это компонент, то боюсь что без lazbuild вам не обойтись

я его подключаю, на форме компорнента нет. Его графический движок подключает и использует.
предлагаю собственно создать разные LPI,


выход, но как-то уже на говнокод тянет. Да и запутаться можно, какая лпи для какой системы. По сути lazarus просто запускает fpc с необходимыми параметрами. вот если бы можно было как-то посмотреть команду которую он вызывает когда ф9 жмешь. Думаю там и можно будет увидеть что он там тайное дописывает.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

я его подключаю, на форме компорнента нет. Его графический движок подключает и использует.

Расшифруйте эту фразу, пожалуйста. Я конечно понимаю, что "ответ программиста точен, но бесполезен" (с) (из старого анекдота).
Все-таки посмотрите файл build.sh из проекта doublecmd, там как раз ваш момент полностью описан
azatsh
новенький
Сообщения: 33
Зарегистрирован: 20.07.2010 10:14:04

Сообщение azatsh »

Нашел как и что=)
Вобщем сделал так
- открыл терминал там набрал lazarus-ide. открывается лазарус с моим последним проектом
- нажимаю контрл+ф9
- переключаюсь в консоль и читаю что он там понаписал

может кому еще пригодится.

я моем случае надо было добавить -dLCLgtk2
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

azatsh писал(а):вот если бы можно было как-то посмотреть команду которую он вызывает когда ф9 жмешь.

В параметрах проекта, нажмите кнопку Показать параметры.
azatsh
новенький
Сообщения: 33
Зарегистрирован: 20.07.2010 10:14:04

Сообщение azatsh »

теперь возникла другая проблемма.
если писать вызов непосредственно в терминал то все работает, но если вызывать через
AProcess := TProcess.Create(form1);
AProcess.CommandLine :="бла-бла";
AProcess.Options :=[poWaitOnExit,poUsePipes];
AProcess.Execute;
AProcess.Free;

то не работает

AProcess.Options пробовал разные
Ответить