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

Общие вопросы программирования, алгоритмы и т.п.

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

Аватара пользователя
DYUMON
постоялец
Сообщения: 234
Зарегистрирован: 11.03.2009 12:32:54
Контактная информация:

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

Сообщение DYUMON »

День добрый.
Подскажите по использованию директивы {$define ...}.
Можно её как то расположить что бы она была в одном месте , а то бегать по 20 модулям и менять её как то не камильфо.
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

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

Сообщение olegy123 »

Можно вначале файла указать в [имя проекта].lpr перед всеми uses
другой путь указать в свойствах проекта данный параметр

Добавлено спустя 56 секунд:
http://wiki.freepascal.org/Conditional_compilation
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

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

Сообщение Дож »

Ещё можно через {$I defines.inc}
Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

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

Сообщение Mirage »

Можно указать компилятору -D..., тогда будут объявлены во всех модулях.
Но если их менять надо, то лучше подход с {$ defines.inc} во всех модулях.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

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

Сообщение Ichthyander »

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

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

Сообщение runewalsh »

Не хочу создавать новую тему: можно ли в свойствах проекта задать параметры сразу для нескольких (всех) режимов сборки? Полностью раздельные иногда неудобны, настолько, что проще вынести всё в общий .cfg и там разрулить через безусловную общую часть, #ifdef debug, etc., но это как бы аннулирует всю кухню с GUI и хранением параметров в .lpi.
Аватара пользователя
DYUMON
постоялец
Сообщения: 234
Зарегистрирован: 11.03.2009 12:32:54
Контактная информация:

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

Сообщение DYUMON »

Спасибо. Помогло. Через параметры проекта удалось заставить программу собираться так как надо.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

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

Сообщение Ichthyander »

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

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

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

Сообщение runewalsh »

Например, в студии можно сделать именно так, как я говорю, хотелось бы то же самое. Там в вопросе и пример, когда это нужно: представь, что у меня куча конфигураций проекта вида (Debug/Release) × (x86/x64) × (CPU/CUDA) × (DLL/Static/Standalone), и однажды мне понадобилось изменить какую-то опцию для всех «CPU».
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

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

Сообщение Лекс Айрин »

runewalsh писал(а):и однажды мне понадобилось изменить какую-то опцию для всех «CPU».


Для этого есть в параметрах проекта вкладки "Параметры пользователя" и "Дополнения и перекрытия". Плюс, можно отдельно компилятору добавить опций.
Аватара пользователя
runewalsh
энтузиаст
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

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

Сообщение runewalsh »

А, да, там галочки есть для режимов. Спасибо! :з
Аватара пользователя
Cheb
энтузиаст
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34
Контактная информация:

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

Сообщение Cheb »

Это всё работает только пока в Лазаре.

В чистом же фпц надо выносить подобные настройки в отдельный .inc файл.
А потом инклудить этот файл везде {$include moidefainy.inc}
Тогда проект будет лазаренезависимым.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

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

Сообщение Лекс Айрин »

Cheb, нельзя иметь слишком многого((
Скорее всего, именно так и поступает сам лазарь. Не забываем, что fpc консольная программа, а значит все настройки проекта надо давать либо в командной строке, либо через специальный сборочный файл (make).
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

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

Сообщение olegy123 »

в IDE freepascal тоже есть Conditional compilation
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

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

Сообщение Лекс Айрин »

olegy123, IDE FPC -- используется редко...фактически, его можно безболезненно выпилить. Да и, собственно, это тоже надстройка. К тому же, не слишком удобная.
Ответить