Страница 1 из 3
условная компиляция, DEFINE в lpr
Добавлено: 15.05.2024 20:20:36
ssnakess
Делаю модуль который надо подключить в разные проекты и необходимо условной компиляцией исключить некоторые куски кода в разных проектах, для этого определил в модуле проекта символы и проверяю их существование в модуле, но их не видит модуль, хоть определяй, хоть нет
Сделал тестовый проект, с одной единственной формой и кнопкой на ней,
в lpr стоит следующее
Код: Выделить всё
program project1;
{$mode objfpc}{$H+}
{$DEFINE MYTEST}
uses
...
unit1;
в модуле формы, Unit1, соответственно
Код: Выделить всё
....
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
{$IFDEF MYTEST}
Button1.Caption:='defined';
{$ELSE}
Button1.Caption:='not defined';
{$ENDIF}
end;
....
отрабатывает ветка
Button1.Caption:='not defined';
Почему?? что я делаю не так??
Re: условная компиляция, DEFINE в lpr
Добавлено: 15.05.2024 21:09:05
RRYTY
Re: условная компиляция, DEFINE в lpr
Добавлено: 16.05.2024 09:52:55
ssnakess
RRYTY писал(а):http://www.freepascal.ru/forum/viewtopic.php?f=1&t=7295
интересно, почему я не смог найти это?
честное пионерское - искал в поле Поиск - и небыло нифига подобного, почему и создал тему.
Но тогда есть другой вопрос, как посмотреть все текущие DEFINE в проекте?
т.е. например есть директива UNIX или WINDOWS, это я знаю. а вот как узнать какие директивы сейчас в проекте определены??
просто может там есть уже стандартные директивы которые я мог бы использовать и не делать своих

Например версия компилятора или версия ide
Re: условная компиляция, DEFINE в lpr
Добавлено: 16.05.2024 10:16:18
RRYTY
Re: условная компиляция, DEFINE в lpr
Добавлено: 16.05.2024 11:01:43
ssnakess
спасибо за ссылку, но там нет ответа на мой вопрос - как узнать все текущие определения проекта?
например в модуле sysutils который по умолчанию включается в uses и там есть такие
Код: Выделить всё
{$DEFINE OS_FILESETDATEBYNAME}
{$DEFINE HAS_SLEEP}
{$DEFINE HAS_OSERROR}
{$DEFINE HAS_OSCONFIG}
{$DEFINE HAS_TEMPDIR}
{$DEFINE HASUNIX}
{$DEFINE HASCREATEGUID}
{$DEFINE HAS_OSUSERDIR}
{$DEFINE HAS_LOCALTIMEZONEOFFSET}
{$DEFINE HAS_GETTICKCOUNT64}
// this target has an fileflush implementation, don't include dummy
{$DEFINE SYSUTILS_HAS_FILEFLUSH_IMPL}
{ used OS file system APIs use ansistring }
{$define SYSUTILS_HAS_ANSISTR_FILEUTIL_IMPL}
{ OS has an ansistring/single byte environment variable API }
{$define SYSUTILS_HAS_ANSISTR_ENVVAR_IMPL}
...
ну и еще немного дальше по тексту
так, вот, а кроме как "путешествия" в ручном режиме, по всем подключенным модулям в проекте,
можно как то увидеть все текущие определения проекта?
Re: условная компиляция, DEFINE в lpr
Добавлено: 16.05.2024 11:08:52
Снег Север
А элементарный текстовый поиск по слову $DEFINE - не? Ну так собирать все дефайны в одном включаемом файле для такого и придумано.
Re: условная компиляция, DEFINE в lpr
Добавлено: 16.05.2024 11:23:57
ssnakess
Снег Север писал(а):А элементарный текстовый поиск по слову $DEFINE - не? Ну так собирать все дефайны в одном включаемом файле для такого и придумано.
т.е. вы предлагаете пройтись по всем uses, которые есть в проекте ( по всем, в том числе и тем например которые есть в sysutils, т.е. Linux,Unix,errors,sysconst,Unixtype, а так же по их uses)
и их инклудам, и в этом тексте искать уже define ?
Добавлено спустя 7 минут 41 секунду:
Меню->Поиск->Найти в файлах
не ищет в директивах, от слова совсем
Re: условная компиляция, DEFINE в lpr
Добавлено: 16.05.2024 13:57:51
Tango
В каждый модуль проекта добавить строку {$I Defines.pas}
А в нём (файле) уже разместить нужные дефайны.
Re: условная компиляция, DEFINE в lpr
Добавлено: 16.05.2024 14:45:41
ssnakess
Tango писал(а):В каждый модуль проекта добавить строку {$I Defines.pas}
А в нём (файле) уже разместить нужные дефайны.
Я так и делал сперва, но это архи не удобно, учитывая что некоторые модули я использую как библиотеку
т.е. в ней находятся функции не только определенного проекта, а просто общие, которые я периодически юзаю в других проектах
и если идти по принципу {$I mydefines.def}
тогда мне нужно в каждом своем проекте, где я юзаю этот библиотечный модуль - шарашить этот файлик с дефайнами - что черевато - человек существо забывчивое

)
т.е. путь с установкой дефайнов в настройках проекта - самое оно, тогда в принципе если и забудешь определить дефайн то ничего страшного не случиться

Но вот вопрос, а как узнать какие дефайны есть в проекте, т.е. вытащить их из всех модулей включенных в uses (не только файлов проекта, а всех модулей включенных в uses)
Re: условная компиляция, DEFINE в lpr
Добавлено: 16.05.2024 16:07:49
Alexander
А переменные окружения или ключи командной строки с параметрами определений не подходят ?
Re: условная компиляция, DEFINE в lpr
Добавлено: 16.05.2024 16:30:24
RRYTY
Alexander писал(а):так, вот, а кроме как "путешествия" в ручном режиме, по всем подключенным модулям в проекте
Действительно,
ssnakess писал(а):человек существо забывчивое
С учетом мгновенно забытой темы об области видимости и возможностей команды grep (а есть еще и find) не надо путешествовать, тем более, в ручном режиме.
Re: условная компиляция, DEFINE в lpr
Добавлено: 16.05.2024 21:28:12
WAYFARER
RRYTY писал(а):С учетом мгновенно забытой темы об области видимости и возможностей команды grep (а есть еще и find) не надо путешествовать, тем более, в ручном режиме.
Ему (если я правильно понимаю) нужно все дефайны в проекте и всех его зависимостях.
Re: условная компиляция, DEFINE в lpr
Добавлено: 17.05.2024 09:25:45
ssnakess
WAYFARER писал(а):RRYTY писал(а):С учетом мгновенно забытой темы об области видимости и возможностей команды grep (а есть еще и find) не надо путешествовать, тем более, в ручном режиме.
Ему (если я правильно понимаю) нужно все дефайны в проекте и всех его зависимостях.
Именно так.
Grep и find - штуки хорошие, но нафига мне ВСЕ что есть в папках лазаря?

)
Список дефайнов проекта, нужен
Т.е. только тех дефайнов, которые описаны в модулях используемых в проекте (в том числе и стандартные типа sysutils, если он подключен)
Re: условная компиляция, DEFINE в lpr
Добавлено: 17.05.2024 10:06:38
WAYFARER
ssnakess писал(а):Grep и find - штуки хорошие, но нафига мне ВСЕ что есть в папках лазаря? )
Список дефайнов проекта, нужен
Т.е. только тех дефайнов, которые описаны в модулях используемых в проекте (в том числе и стандартные типа sysutils, если он подключен)
Единственное что приходит в голову это парсинг, рекурсивно пройти по всем uses и получить полный список файлов.
Если не секрет, то зачем вообще это нужно?
Re: условная компиляция, DEFINE в lpr
Добавлено: 17.05.2024 10:12:11
Alexander
Но в принципе вопрос правильный. Надо понять, что мешает разработчикам сделать дефайны в файле проекта глобальными.
Либо это не входит в представления разработчиков о Паскале, либо можно написать как пожелание улучшения или багрепорт.
Сами разработчики выходят из положения через инклюд файл, через переменные окружения и ключи командной строки.
А такого способа не предусмотрели.