Несколько проектов в одном. Условная компиляция

Вопросы программирования и использования среды Lazarus.

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

Несколько проектов в одном. Условная компиляция

Сообщение resident » 15.09.2013 11:19:03

Здрасть :)

Проект будет иметь несколько разновидностей (создаются разные классы, используются разные модули, используется разное оформление, данные и т.д.).
Можно ли как-то глобально (для всех модулей) задать директивы компиляции. Но при этом чтобы была возможность компилировать разновидности проекта разными bat-никами через командную строку. Т.е. один раз задать что-то, положить bat-ники на рабочий стол и потом компилировать, щелкая на них.

Вот такой коммунизм нафантазировал. Такое вобще возможно?

Добавлено спустя 1 минуту 20 секунд:
Пока думаю, делать несколько проектов, которые используют свои и многие общие модули. Без всякой условной компиляции.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Несколько проектов в одном. Условная компиляция

Сообщение hinst » 15.09.2013 12:44:02

как вариант: идёшь в настройки проекта, Параметры компилятора -> Режимы сборки; там создаёшь режимы сколько нужно; потом в Параметры компилятора -> Другие, там есть настройка "Использовать дополнительный файл с настройки компилятора" там для каждого режима прописываешь свой файл, потом в этих файлах пишешь директивы
Про конфигурационные файлы:
http://www.freepascal.org/docs-html/user/userse17.html
Можно много чего ещё интересного сделать; я думаю что удобно для разных "версий" сборки проекта написать "настройки" компиляции в конфигурационных файлах FPC, к тому же, их можно использовать отдельно от лазаруса, только с компилятором

Добавлено спустя 4 минуты:
у лазаруса есть сборщик lazbuild, или как его... если там можно указывать ему в качестве параметра режим сборки, а я почти уверен, что можно, то вот и решение проблемы
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Несколько проектов в одном. Условная компиляция

Сообщение resident » 15.09.2013 15:06:04

hinst
Супер! Спасиб, попробую использовать :)
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Несколько проектов в одном. Условная компиляция

Сообщение Ichthyander » 15.09.2013 15:22:37

Я вот как раз так реализовал автоматическую сборку проекта под разный набор директив компилятора:
Батник для запуска build-all.cmd
Код: Выделить всё
chcp 1251
set FPC_PATH=C:\lazarus\fpc\2.6.2\bin\i386-win32
for /F "tokens=1,2,3 delims=;" %%i in (debug_keys.csv) do (
  set BuildFolder=%%i
  set DebugKeys=%%j
  set BuildName=%%k
  call build.cmd
)
pause


Батник build.cmd

Код: Выделить всё
del *.o
del *.ppu
del *.dbg
del *.

C:\lazarus\fpc\2.6.2\bin\i386-win32\fpc C:\Users\1\Documents\Проекты\Lazarus\Whic\2.2.1\whic.lpr  -MObjFPC -Sgh -CX -O1 -Twin32 -g -gl -XX -WG -vewnhi -l -FuC:\lazarus\components\synapse\source\lib -FuC:\lazarus\components\rx\lib\i386-win32 -FuC:\lazarus\lcl\units\i386-win32\win32 -FuC:\lazarus\lcl\units\i386-win32 -FuC:\lazarus\components\lazutils\lib\i386-win32 -FuC:\lazarus\packager\units\i386-win32 -Fu. -vm4055,5024 -dLCL -dLCLwin32 %DebugKeys%

%FPC_PATH%\strip.exe whic.exe

pause

%FPC_PATH%\upx.exe whic.exe  --compress-icons=0
copy whic.exe "%BuildFolder%\whic.exe"
... ...

В файле debug_keys.csv лежат наборы директив для различных вариантов сборок. К примеру, у меня
1;-dpro;Proxies
3;-dpro -ddz;Zones
5;-dpro -dws;Websources
7;-dpro -ddz -dws;Webmaster
9;-dpro -dauto;Auto
11;-dpro -ddz -dauto;Domainer
15;-dpro -ddz -dws -dauto;Full
...
...

При этом батник автоматически рассовывает собранные исполняемые файлы по отдельным папкам (по номерам сборок)
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 698
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Несколько проектов в одном. Условная компиляция

Сообщение resident » 18.09.2013 15:05:57

Спасиб, похоже то что нужно :)
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Несколько проектов в одном. Условная компиляция

Сообщение Tango » 23.09.2013 14:42:22

А у меня в самом верху модулей стоит {$I DefineType.pas}
в нём прописаны разные директивы, а папки разные, а файл один и тот же во всех папках, но разный DefineType.pas.
Аватара пользователя
Tango
постоялец
 
Сообщения: 162
Зарегистрирован: 31.05.2012 17:07:30


Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 241

Рейтинг@Mail.ru