DX Условия компиляции
От: Diouzshev Россия  
Дата: 27.05.05 12:50
Оценка:
Hello, All!
Типичная конструкция:

{$IFDEF MY_DEF}
код (1)
{$ELSE}
код (2)
{$ENDIF}

Как сделать так, чтобы в проект Progject1.dpr скомпилировался с кодом (1),
а проект Project2.dpr с кодом (2)?

Если сделать {$DEFINE MY_DEF} в другом модуле -- не отрабатывет

With best regards, Alexander Diouzshev-Maltsev.
Posted via RSDN NNTP Server 1.9
Re: DX Условия компиляции
От: Diouzshev Россия  
Дата: 27.05.05 12:55
Оценка:
Hello, Diouzshev!
You wrote on Fri, 27 May 2005 12:50:30 GMT:
Чот-то непонятно получилось Попробую так:

есть модуль участвующий в нескольких проектах с конструкцией:
{$IFDEF MY_DEF}
код (1)
{$ELSE}
код (2)
{$ENDIF}

Как сделать так, чтобы проект Progject1.dpr скомпилировался с кодом
(1), а проект Project2.dpr с кодом (2)?

Если сделать {$DEFINE MY_DEF} в другом модуле или DPR-файле -- не срабатывет

With best regards, Alexander Diouzshev-Maltsev.
Posted via RSDN NNTP Server 1.9
Re: DX Условия компиляции
От: Softwarer http://softwarer.ru
Дата: 27.05.05 13:02
Оценка:
Здравствуйте, Diouzshev, Вы писали:

D>Типичная конструкция:


Я бы рекомендовал максимально избегать таких типичных конструкций. К сожалению, они иногда необходимы, в таких случаях — советую максимально локализовать.

Активизировать эти условия я бы предложил из соответствующей строки опций проекта (при компиляции из IDE), либо директивой -D при компиляции из командной строки. Причина — как правило, нужна и необходима единая настройка для всего проекта. Компиляция, при которой половина модулей откомпилирована в режиме A, а половина — в режиме NOT_A, мягко говоря вряд ли будет работать. Это будет еще хуже, чем DLL Hell.

Исключений можно назвать два. Во-первых, бывают сугубо локальные переменные, которые устанавливаются в модуле, в нем же используются и нигде больше не нужны. Во-вторых, часто делать стандартный файл, подключаемый по {$I} — это решение для случая, когда хочется настраиваться под разные версии дельфы, для кода типа

{$IFDEF VER13}
  {$DEFINE DELPHI5_OR_LATER}
  {$DEFINE DELPHI6_OR_LATER}
  ...
{$ENDIF}
Re: DX Условия компиляции
От: kavlad Россия http://www.wavesoft.ru
Дата: 27.05.05 13:02
Оценка:
Здравствуйте, Diouzshev, Вы писали:

D>Если сделать {$DEFINE MY_DEF} в другом модуле -- не отрабатывет


Сделай отдельный файл с директивами и включай его в модули директовой {$I ...}
... << RSDN@Home 1.1.4 beta 4 rev. 302>>
Re[2]: DX Условия компиляции
От: Danchik Украина  
Дата: 27.05.05 13:04
Оценка:
Здравствуйте, Diouzshev, Вы писали:

D>Hello, Diouzshev!

D>You wrote on Fri, 27 May 2005 12:50:30 GMT:
D>Чот-то непонятно получилось Попробую так:

D>есть модуль участвующий в нескольких проектах с конструкцией:

D> {$IFDEF MY_DEF}
D> код (1)
D> {$ELSE}
D> код (2)
D> {$ENDIF}

D>Как сделать так, чтобы проект Progject1.dpr скомпилировался с кодом

D>(1), а проект Project2.dpr с кодом (2)?

D>Если сделать {$DEFINE MY_DEF} в другом модуле или DPR-файле -- не срабатывет


D>With best regards, Alexander Diouzshev-Maltsev.


Самый простой

Project/Options, закладка Directories/Conditionals. Добавить в Cоnditionals MY_DEF для первого проэкта.
Re[2]: DX Условия компиляции
От: alive Россия  
Дата: 27.05.05 13:18
Оценка:
Здравствуйте, Diouzshev, Вы писали:

D>есть модуль участвующий в нескольких проектах с конструкцией:

D> {$IFDEF MY_DEF}
D> код (1)
D> {$ELSE}
D> код (2)
D> {$ENDIF}

D>Как сделать так, чтобы проект Progject1.dpr скомпилировался с кодом

D>(1), а проект Project2.dpr с кодом (2)?

D>Если сделать {$DEFINE MY_DEF} в другом модуле или DPR-файле -- не срабатывет


А если сделать Project1.inc файл с {$DEFINE MY_DEF}
и подключить {$I Project1.inc}?
... << RSDN@Home 1.1.4 beta 7 rev. 458>>
Keep yourself alive
Re[3]: DX Условия компиляции
От: Diouzshev Россия  
Дата: 27.05.05 13:22
Оценка:
Hello, Danchik!
You wrote on Fri, 27 May 2005 13:04:07 GMT:

D> Самый простой


D> Project/Options, закладка Directories/Conditionals. Добавить в

D> Cоnditionals MY_DEF для первого проэкта.

Спасибо, помогло...
Только Build project вместо привычного F9 нужен — сама делфя не перекомпиливает...


With best regards, Alexander Diouzshev-Maltsev.
Posted via RSDN NNTP Server 1.9
Re[4]: DX Условия компиляции
От: alive Россия  
Дата: 29.05.05 17:57
Оценка:
Здравствуйте, Diouzshev, Вы писали:

D>Спасибо, помогло...

D>Только Build project вместо привычного F9 нужен — сама делфя не перекомпиливает...

Я же говорю — сделай инклюд файл с условиями компиляции. Не нужно будет делать билд при изменении условий.
... << RSDN@Home 1.1.4 beta 7 rev. 458>>
Keep yourself alive
Re[3]: DX Условия компиляции
От: Sinclair Россия https://github.com/evilguest/
Дата: 30.05.05 04:13
Оценка:
Здравствуйте, alive, Вы писали:
A>А если сделать Project1.inc файл с {$DEFINE MY_DEF}
A>и подключить {$I Project1.inc}?
тогда он подцепится и во втором проекте.
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: DX Условия компиляции
От: icWasya  
Дата: 30.05.05 14:36
Оценка:
Здравствуйте, Diouzshev, Вы писали:

D>Hello, All!

D>Типичная конструкция:

D> {$IFDEF MY_DEF}

D> код (1)
D> {$ELSE}
D> код (2)
D> {$ENDIF}

D>Как сделать так, чтобы в проект Progject1.dpr скомпилировался с кодом (1),

D> а проект Project2.dpr с кодом (2)?

D>Если сделать {$DEFINE MY_DEF} в другом модуле -- не отрабатывет


D>With best regards, Alexander Diouzshev-Maltsev.


Я делаю так :

в файл Progject1.dpr вставляю строку
{$include 'E:\Projects\Project1\Defines.inc'} // с полным путём

в файл Progject2.dpr вставляю строку
{$include 'E:\Projects\Project2\Defines.inc'}


во все файлы *.pas
вставляю строку
{$include 'Defines.inc'}

и не забывать делать полный ребилд
Re[2]: DX Условия компиляции
От: Oleg A. Bachin Украина  
Дата: 30.05.05 15:13
Оценка:
Здравствуйте, icWasya, Вы писали:

W>Я делаю так :


W>в файл Progject1.dpr вставляю строку

W>{$include 'E:\Projects\Project1\Defines.inc'} // с полным путём

угу, и потом вытащив ЭТО из CVS буду у себя править на полный свой путь?
-D в makefile рулит...
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re[4]: DX Условия компиляции
От: alive Россия  
Дата: 31.05.05 09:24
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, alive, Вы писали:

A>>А если сделать Project1.inc файл с {$DEFINE MY_DEF}
A>>и подключить {$I Project1.inc}?
S>тогда он подцепится и во втором проекте.

Я не точно выразил свою мысль
В общий для проектов файл подключаем {$I Project.inc}
а для каждого из проектов создаем файл Project.inc со специфичными
дефайнами.
... << RSDN@Home 1.1.4 beta 7 rev. 458>>
Keep yourself alive
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.