Страница 1 из 2

Директива {$define траляля}

СообщениеДобавлено: 04.05.2017 05:45:06
DYUMON
День добрый.
Подскажите по использованию директивы {$define ...}.
Можно её как то расположить что бы она была в одном месте , а то бегать по 20 модулям и менять её как то не камильфо.

Re: Директива {$define траляля}

СообщениеДобавлено: 04.05.2017 06:33:04
olegy123
Можно вначале файла указать в [имя проекта].lpr перед всеми uses
другой путь указать в свойствах проекта данный параметр

Добавлено спустя 56 секунд:
http://wiki.freepascal.org/Conditional_compilation

Re: Директива {$define траляля}

СообщениеДобавлено: 04.05.2017 12:58:55
Дож
Ещё можно через {$I defines.inc}

Re: Директива {$define траляля}

СообщениеДобавлено: 04.05.2017 16:17:40
Mirage
Можно указать компилятору -D..., тогда будут объявлены во всех модулях.
Но если их менять надо, то лучше подход с {$ defines.inc} во всех модулях.

Re: Директива {$define траляля}

СообщениеДобавлено: 04.05.2017 23:53:11
Ichthyander
Задать директивы компилятора ( {$define ...}) для всего проекта можно в настройках проекта.
Проект => Параметры проекта => Вкладка "Параметры пользователя" => Многострочное поле "Другие". Если Вы прописываете, к примеру, такую переменную в коде {IFDEF $FLAG1}, то в настройках добавьте латинскую букву d в начале, то есть -dFLAG1 или -dDEBUG... Это справедливо как для Ваших пользовательских ключей компиляции, так и используемых самим Lazarus.
Вот тема была viewtopic.php?f=5&t=5044
Набор таких ключей на вкладке пользовательские параметры сохраняется в профиле режима сборки. Таким образом, можно настроить, к примеру, разные версии программы с разными ключами, а при компиляции просто указывать нужный режим сборки с тулбара главного окна

Re: Директива {$define траляля}

СообщениеДобавлено: 05.05.2017 00:29:24
runewalsh
Не хочу создавать новую тему: можно ли в свойствах проекта задать параметры сразу для нескольких (всех) режимов сборки? Полностью раздельные иногда неудобны, настолько, что проще вынести всё в общий .cfg и там разрулить через безусловную общую часть, #ifdef debug, etc., но это как бы аннулирует всю кухню с GUI и хранением параметров в .lpi.

Re: Директива {$define траляля}

СообщениеДобавлено: 05.05.2017 05:12:36
DYUMON
Спасибо. Помогло. Через параметры проекта удалось заставить программу собираться так как надо.

Re: Директива {$define траляля}

СообщениеДобавлено: 05.05.2017 08:36:07
Ichthyander
runewalsh писал(а):Не хочу создавать новую тему: можно ли в свойствах проекта задать параметры сразу для нескольких (всех) режимов сборки? Полностью раздельные иногда неудобны, настолько, что проще вынести всё в общий .cfg и там разрулить через безусловную общую часть, #ifdef debug, etc., но это как бы аннулирует всю кухню с GUI и хранением параметров в .lpi.

Не совсем понятна задача. Режимы сборки ведь создаются, чтобы они менялись не так часто. Сначала создаете один режим сборки с наибольшим или полным соответствием тем самым параметрам, которые будут общими для всех или для части Ваших будущих режимов сборки, а потом на основании этого режима создаете остальные режимы сборки... Собственно, всё. Понятно, что просто, ну и скорее всего не то, что Вам требуется, но так Вы задали вопрос...
А еще можно в общем модуле прописать код, в котором будут определятся "сеты"/группы ключей компиляции с помощью меньшего набора ключей компиляции... Может так?

Re: Директива {$define траляля}

СообщениеДобавлено: 05.05.2017 09:34:32
runewalsh
Например, в студии можно сделать именно так, как я говорю, хотелось бы то же самое. Там в вопросе и пример, когда это нужно: представь, что у меня куча конфигураций проекта вида (Debug/Release) × (x86/x64) × (CPU/CUDA) × (DLL/Static/Standalone), и однажды мне понадобилось изменить какую-то опцию для всех «CPU».

Re: Директива {$define траляля}

СообщениеДобавлено: 05.05.2017 09:45:02
Лекс Айрин
runewalsh писал(а):и однажды мне понадобилось изменить какую-то опцию для всех «CPU».


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

Re: Директива {$define траляля}

СообщениеДобавлено: 05.05.2017 11:05:10
runewalsh
А, да, там галочки есть для режимов. Спасибо! :з

Re: Директива {$define траляля}

СообщениеДобавлено: 05.05.2017 11:45:16
Cheb
Это всё работает только пока в Лазаре.

В чистом же фпц надо выносить подобные настройки в отдельный .inc файл.
А потом инклудить этот файл везде {$include moidefainy.inc}
Тогда проект будет лазаренезависимым.

Re: Директива {$define траляля}

СообщениеДобавлено: 05.05.2017 13:01:08
Лекс Айрин
Cheb, нельзя иметь слишком многого((
Скорее всего, именно так и поступает сам лазарь. Не забываем, что fpc консольная программа, а значит все настройки проекта надо давать либо в командной строке, либо через специальный сборочный файл (make).

Re: Директива {$define траляля}

СообщениеДобавлено: 06.05.2017 00:09:28
olegy123
в IDE freepascal тоже есть Conditional compilation

Re: Директива {$define траляля}

СообщениеДобавлено: 06.05.2017 09:31:05
Лекс Айрин
olegy123, IDE FPC -- используется редко...фактически, его можно безболезненно выпилить. Да и, собственно, это тоже надстройка. К тому же, не слишком удобная.