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

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

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

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

Сообщение DYUMON » 04.05.2017 05:45:06

День добрый.
Подскажите по использованию директивы {$define ...}.
Можно её как то расположить что бы она была в одном месте , а то бегать по 20 модулям и менять её как то не камильфо.
Аватара пользователя
DYUMON
постоялец
 
Сообщения: 234
Зарегистрирован: 11.03.2009 13:32:54

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

Сообщение olegy123 » 04.05.2017 06:33:04

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

Добавлено спустя 56 секунд:
http://wiki.freepascal.org/Conditional_compilation
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

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

Сообщение Дож » 04.05.2017 12:58:55

Ещё можно через {$I defines.inc}
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

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

Сообщение Mirage » 04.05.2017 16:17:40

Можно указать компилятору -D..., тогда будут объявлены во всех модулях.
Но если их менять надо, то лучше подход с {$ defines.inc} во всех модулях.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

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

Сообщение Ichthyander » 04.05.2017 23:53:11

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

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

Сообщение runewalsh » 05.05.2017 00:29:24

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

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

Сообщение DYUMON » 05.05.2017 05:12:36

Спасибо. Помогло. Через параметры проекта удалось заставить программу собираться так как надо.
Аватара пользователя
DYUMON
постоялец
 
Сообщения: 234
Зарегистрирован: 11.03.2009 13:32:54

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

Сообщение Ichthyander » 05.05.2017 08:36:07

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

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

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

Сообщение runewalsh » 05.05.2017 09:34:32

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

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

Сообщение Лекс Айрин » 05.05.2017 09:45:02

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


Для этого есть в параметрах проекта вкладки "Параметры пользователя" и "Дополнения и перекрытия". Плюс, можно отдельно компилятору добавить опций.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение runewalsh » 05.05.2017 11:05:10

А, да, там галочки есть для режимов. Спасибо! :з
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

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

Сообщение Cheb » 05.05.2017 11:45:16

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

В чистом же фпц надо выносить подобные настройки в отдельный .inc файл.
А потом инклудить этот файл везде {$include moidefainy.inc}
Тогда проект будет лазаренезависимым.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

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

Сообщение Лекс Айрин » 05.05.2017 13:01:08

Cheb, нельзя иметь слишком многого((
Скорее всего, именно так и поступает сам лазарь. Не забываем, что fpc консольная программа, а значит все настройки проекта надо давать либо в командной строке, либо через специальный сборочный файл (make).
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

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

Сообщение olegy123 » 06.05.2017 00:09:28

в IDE freepascal тоже есть Conditional compilation
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

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

Сообщение Лекс Айрин » 06.05.2017 09:31:05

olegy123, IDE FPC -- используется редко...фактически, его можно безболезненно выпилить. Да и, собственно, это тоже надстройка. К тому же, не слишком удобная.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

След.

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24

Рейтинг@Mail.ru