Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2014, 01:33   #1
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию Глобальный Define

Всем привет. Появилась небольшая проблема, в частности :
объявление директив компилятора кроме как в настройках проекта (проектов несколько, и в каждом перебивать эти директивы становится слишком муторно, да и в ревизиях они отображаются не наглядно). Были попытки вынести их в *.inc файл, но где его (*.inc файл {$I directives.inc} ) тогда подключать. в каждом *.pas файле проекта (локально) тоже не вариант, т.к. одна и та же библиотека используется несколькими проектами => либо делать полностью изолированные проекты друг от друга и в случае изменений редактировать одно и тоже во всех проектах.
словом, какие варианты есть объявление глобальных директив в Delphi?
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 02.10.2014, 07:37   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Оптимальней чем в опциях проекта ничего не придумали
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.10.2014, 09:07   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

В каждом pas файле где это требуется. Во всех? Ну значит во всех.
Человек_Борща вне форума Ответить с цитированием
Старый 02.10.2014, 11:20   #4
StriderX
Форумчанин
 
Регистрация: 21.04.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от VIK_aka_TOR Посмотреть сообщение
...какие варианты есть объявление глобальных директив в Delphi?
Есть вариант не использовать их вообще (это прям сильно сильно большой bad practice). Заводим некий shared юнит с листом булевых флагов. Вот они нам и заменят директивы условной компиляции. Это здорово в том плане, что компилятор будет всегда проверять отключенный код.
StriderX вне форума Ответить с цитированием
Старый 02.10.2014, 11:47   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от StriderX Посмотреть сообщение
Есть вариант не использовать их вообще (это прям сильно сильно большой bad practice). Заводим некий shared юнит с листом булевых флагов. Вот они нам и заменят директивы условной компиляции. Это здорово в том плане, что компилятор будет всегда проверять отключенный код.
когда проект мультиплатформенный или что-то иное, бывает нужно чтоб код именно не попал в результат.(в случае нескольких платформ нельзя проверять код не имеющий отношения к текущей платформе)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.10.2014, 12:47   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

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

По теме, насколько знаю, надо либо добавлять в дифайны проекта (в свойствах проекта) либо в каждый пас-файл директивы или инклюд с директивами.

Однако, можно покопать внутри dproj и groupproj - файлов, и даже навернуть в них некую автоматизацию, благо хмл-формат позволит это сделать легко, но это ессно для версий дельфи 2006+ (мб и 2005 тоже), д7 и ранее - в пролёте, там близкие к ини-формату файлы настроек проектов, но истинного самурая и это не остановит
phomm вне форума Ответить с цитированием
Старый 02.10.2014, 14:23   #7
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Версия дельфы XE2 . В перспективе перейти на ХЕ6.
По поводу dproj была идея написать программку и в нее добавлять в список файлы проектов и там уже наглядно и более приятно редактировать директивы. Но хотел проверить есть ли стандартные способы решения сей проблемы.
Всем спасибо за участие)
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 02.10.2014, 15:14   #8
StriderX
Форумчанин
 
Регистрация: 21.04.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
когда проект мультиплатформенный или что-то иное, бывает нужно чтоб код именно не попал в результат.(в случае нескольких платформ нельзя проверять код не имеющий отношения к текущей платформе)
Первым делом не могу не заметить, что код не попадёт в результат - булева константа. Оптимизатор вырежет If (False) код из проекта )
Дальше я попробовал коротко ответить на это замечание, но увы нет - у меня такого ответа нет. Давайте попробуем сойтись на следующем - ваш мультиплатформенный core-код желательно абстрагировать от такой логики как можно дальше. В результате точки контакта с платформой (зависимым кодом) будут буквально в 1-2 служебных модулях (врапперах). Остальное выбрасывается заборт либо в виде библиотек, либо просто архитектурно. Вот развяка в виде директив будет нужна только в этих врапперах. Но даже в таком случае можно потратить время и извернуться адаптерами или самописным препроцессором (который по заданой схеме\псевдокоду сгенерирует враппер автоматически - такую схему вы можете увидеть на стыках клиент-сервер, какие-нибудь protobuf проекты и т.п.).
StriderX вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
define -=Andriushka=- Общие вопросы C/C++ 1 26.12.2013 19:55
define roulis2844sasha PHP 1 29.03.2012 10:47
#define Артэс Общие вопросы C/C++ 3 11.01.2012 19:50
Глобальный хук на мышь не глобальный О_о JTG Общие вопросы Delphi 3 05.06.2008 17:41