Использоване {$IFDEF

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

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

Использоване {$IFDEF

Сообщение tria » 04.09.2008 15:59:34

Есть два проекта, назовем модуля главных форм Main1 и Main2. Есть модуль, работающий в нескольких проектах Unit1. Необходимо, чтобы в этом модуле для разных проектов выполнялись разные действия, в частности - вывод сообщения в статус бар.

Решение в лоб: Uses Main1 и Main2, в зависимости от какой-то переменной делаем нужное действие. Минус - в ехе попадает код обоих проектов.

Возникло желание воспользоватья директивами.
Но, чтобы директива была видна, она должна быть подключена в этот модуль. Т.е. опять надо подключать Main1 и Main2. При этом их директивы будут противоречить друг другу.

Есть еще вариант. Завести в Unit1 переменную типа Статус Бар и заполнять ее из Main1 и Main2. Однако на самом деле дейтвий больше, чем я привел, и переменных понадобится порядочно...

Может у кого-нить есть другие идеи?
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Re: Использоване {$IFDEF

Сообщение Attid » 04.09.2008 16:04:21

как-то все запутано расказал.
ну по директиве подключаешь модуль и по дерективе заполняешь тулбар, директиву передаешь при компиляции -dMYDir
желательно также делать вывод в разные папки, а то можешь напороться на момент когда в прект попадет Unit1.o скомпилированный с другой директивой.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Использоване {$IFDEF

Сообщение tria » 04.09.2008 16:23:10

Для того, чтобы директива работала была видна - она должна быть задана в текущем модуле, или в подключенном. В модуле Uni1 я ее задать не могу - так как он используется в обоих проектах.
Если я ее задам в Main1 и Main2, то оба эти модуля необходимо подключить - что не даст мне никакого результата.

Добавлено спустя 4 минуты 48 секунд:
или я неправильно понял - директиву можно передать компилятору в настройкаъ проекта?
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Re: Использоване {$IFDEF

Сообщение *vmr » 04.09.2008 16:39:10

tria писал(а):директиву можно передать компилятору в настройкаъ проекта?

Можно

А еще можно инклудить файл со всеми дефайнами:
Код: Выделить всё
unit Unit1;
{$i defines.inc} /// <--- подключаем все дефайны
interface
   ***
Аватара пользователя
*vmr
постоялец
 
Сообщения: 168
Зарегистрирован: 08.01.2007 01:46:07
Откуда: Киев

Re: Использоване {$IFDEF

Сообщение tria » 04.09.2008 16:44:02

Инклудить не подойдет - одна процедура на оба проекта, в зависимости от проекта только малая часть действий процедуры.
Если можно, укажите пож. где конкретно в Лазаре в настройках проекта необходимо указывать директивы компилятору? И в каком формате?
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Re: Использоване {$IFDEF

Сообщение Mr.Smart » 04.09.2008 16:49:34

в меню "проект\параметры компилятора..." потом вкладка "Другое" в редакторе "Параметры пользователя" вводим глобальные дефайны вида
Код: Выделить всё
-d<MyName>
где <MyName> это имя директивы.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Использоване {$IFDEF

Сообщение tria » 04.09.2008 16:53:29

Понял, спасибо, буду пробовать
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Re: Использоване {$IFDEF

Сообщение Attid » 05.09.2008 09:50:16

tria писал(а):или я неправильно понял

я тоже самое и сказал =), только советую там в настроить "каталог вывода модулей" разный для обих проектов, а то можешь наступить на грабли.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Использоване {$IFDEF

Сообщение tria » 05.09.2008 10:58:33

Attid писал(а):
tria писал(а):или я неправильно понял

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

Ну, с этим сложнее. Этот каталог совпадает с выводом ехе файлов. А они у меня лежат в одном каталоге - там еще с десяток файлов, используемых обоими проектами.
Было бы хорошо, *.ppu и *.o складывать где-то отдельно, а *.ехе отдельно. Но, насколько я помню, это невозможно.
Приходится при открытии проекта первым делом выполнять "собрать все"...
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Re: Использоване {$IFDEF

Сообщение Attid » 08.09.2008 10:04:22

tria писал(а):Было бы хорошо, *.ppu и *.o складывать где-то отдельно, а *.ехе отдельно. Но, насколько я помню, это невозможно.
Приходится при открытии проекта первым делом выполнять "собрать все"...

настройками лазаря не возможно, только если батником собирать как я =)

хотя возможно и в лазаре можно если прописать пользовательский параметр -obin/myprog.exe (покласть myprog.exe в каталог bin относительно исходников)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Использоване {$IFDEF

Сообщение alexs » 08.09.2008 11:05:51

Лазарь тогда для отладки не найдёт исполняемый файл.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Использоване {$IFDEF

Сообщение wavebvg » 08.09.2008 11:21:34

Всё это возможно и делается очень легко, иначе смутно себе представляю, как можно было бы работать с загружаемыми библиотеками...
wavebvg
постоялец
 
Сообщения: 354
Зарегистрирован: 28.02.2008 04:57:35


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru