|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.10.2014, 01:33 | #1 |
Участник клуба
Регистрация: 30.01.2011
Сообщений: 1,578
|
Глобальный Define
Всем привет. Появилась небольшая проблема, в частности :
объявление директив компилятора кроме как в настройках проекта (проектов несколько, и в каждом перебивать эти директивы становится слишком муторно, да и в ревизиях они отображаются не наглядно). Были попытки вынести их в *.inc файл, но где его (*.inc файл {$I directives.inc} ) тогда подключать. в каждом *.pas файле проекта (локально) тоже не вариант, т.к. одна и та же библиотека используется несколькими проектами => либо делать полностью изолированные проекты друг от друга и в случае изменений редактировать одно и тоже во всех проектах. словом, какие варианты есть объявление глобальных директив в Delphi?
пишу код не только за печеньки
|
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 |
Форумчанин
Регистрация: 21.04.2014
Сообщений: 115
|
Есть вариант не использовать их вообще (это прям сильно сильно большой bad practice). Заводим некий shared юнит с листом булевых флагов. Вот они нам и заменят директивы условной компиляции. Это здорово в том плане, что компилятор будет всегда проверять отключенный код.
|
02.10.2014, 11:47 | #5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
когда проект мультиплатформенный или что-то иное, бывает нужно чтоб код именно не попал в результат.(в случае нескольких платформ нельзя проверять код не имеющий отношения к текущей платформе)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
02.10.2014, 12:47 | #6 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
StriderX, подход, безусловно, неплох, сам использую, но он не сможет заменить директивы для некоторых задач, самая очевидная из которых кросскомпайлерная поддержка (хотя бы для разных версий дельфи).
По теме, насколько знаю, надо либо добавлять в дифайны проекта (в свойствах проекта) либо в каждый пас-файл директивы или инклюд с директивами. Однако, можно покопать внутри dproj и groupproj - файлов, и даже навернуть в них некую автоматизацию, благо хмл-формат позволит это сделать легко, но это ессно для версий дельфи 2006+ (мб и 2005 тоже), д7 и ранее - в пролёте, там близкие к ини-формату файлы настроек проектов, но истинного самурая и это не остановит |
02.10.2014, 14:23 | #7 |
Участник клуба
Регистрация: 30.01.2011
Сообщений: 1,578
|
Версия дельфы XE2 . В перспективе перейти на ХЕ6.
По поводу dproj была идея написать программку и в нее добавлять в список файлы проектов и там уже наглядно и более приятно редактировать директивы. Но хотел проверить есть ли стандартные способы решения сей проблемы. Всем спасибо за участие)
пишу код не только за печеньки
|
02.10.2014, 15:14 | #8 | |
Форумчанин
Регистрация: 21.04.2014
Сообщений: 115
|
Цитата:
Дальше я попробовал коротко ответить на это замечание, но увы нет - у меня такого ответа нет. Давайте попробуем сойтись на следующем - ваш мультиплатформенный core-код желательно абстрагировать от такой логики как можно дальше. В результате точки контакта с платформой (зависимым кодом) будут буквально в 1-2 служебных модулях (врапперах). Остальное выбрасывается заборт либо в виде библиотек, либо просто архитектурно. Вот развяка в виде директив будет нужна только в этих врапперах. Но даже в таком случае можно потратить время и извернуться адаптерами или самописным препроцессором (который по заданой схеме\псевдокоду сгенерирует враппер автоматически - такую схему вы можете увидеть на стыках клиент-сервер, какие-нибудь protobuf проекты и т.п.). |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |