условная компиляция, DEFINE в lpr

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

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

условная компиляция, DEFINE в lpr

Сообщение ssnakess » 15.05.2024 21:20:36

Делаю модуль который надо подключить в разные проекты и необходимо условной компиляцией исключить некоторые куски кода в разных проектах, для этого определил в модуле проекта символы и проверяю их существование в модуле, но их не видит модуль, хоть определяй, хоть нет :(

Сделал тестовый проект, с одной единственной формой и кнопкой на ней,
в 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';

Почему?? что я делаю не так??
ssnakess
новенький
 
Сообщения: 47
Зарегистрирован: 24.09.2011 23:08:55

Re: условная компиляция, DEFINE в lpr

Сообщение RRYTY » 15.05.2024 22:09:05

RRYTY
постоялец
 
Сообщения: 193
Зарегистрирован: 25.12.2021 10:00:32

Re: условная компиляция, DEFINE в lpr

Сообщение ssnakess » 16.05.2024 10:52:55

RRYTY писал(а):http://www.freepascal.ru/forum/viewtopic.php?f=1&t=7295

интересно, почему я не смог найти это?
честное пионерское - искал в поле Поиск - и небыло нифига подобного, почему и создал тему.
:(

Но тогда есть другой вопрос, как посмотреть все текущие DEFINE в проекте?
т.е. например есть директива UNIX или WINDOWS, это я знаю. а вот как узнать какие директивы сейчас в проекте определены??
просто может там есть уже стандартные директивы которые я мог бы использовать и не делать своих :)
Например версия компилятора или версия ide
ssnakess
новенький
 
Сообщения: 47
Зарегистрирован: 24.09.2011 23:08:55

Re: условная компиляция, DEFINE в lpr

Сообщение RRYTY » 16.05.2024 11:16:18

Предвосхищая дальнейшие вопросы.

https://www.freepascal.org/docs-html/pr ... ogch1.html
RRYTY
постоялец
 
Сообщения: 193
Зарегистрирован: 25.12.2021 10:00:32

Re: условная компиляция, DEFINE в lpr

Сообщение ssnakess » 16.05.2024 12:01:43

RRYTY писал(а):Предвосхищая дальнейшие вопросы.

https://www.freepascal.org/docs-html/pr ... ogch1.html

спасибо за ссылку, но там нет ответа на мой вопрос - как узнать все текущие определения проекта?
например в модуле 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} 
...


ну и еще немного дальше по тексту

так, вот, а кроме как "путешествия" в ручном режиме, по всем подключенным модулям в проекте,
можно как то увидеть все текущие определения проекта?
ssnakess
новенький
 
Сообщения: 47
Зарегистрирован: 24.09.2011 23:08:55

Re: условная компиляция, DEFINE в lpr

Сообщение Снег Север » 16.05.2024 12:08:52

А элементарный текстовый поиск по слову $DEFINE - не? Ну так собирать все дефайны в одном включаемом файле для такого и придумано.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3009
Зарегистрирован: 27.11.2007 16:14:47

Re: условная компиляция, DEFINE в lpr

Сообщение ssnakess » 16.05.2024 12:16:16

Снег Север писал(а):А элементарный текстовый поиск по слову $DEFINE - не? Ну так собирать все дефайны в одном включаемом файле для такого и придумано.

т.е. вы предлагаете пройтись по всем uses, которые есть в проекте ( по всем, в том числе и тем например которые есть в sysutils, т.е. Linux,Unix,errors,sysconst,Unixtype, а так же по их uses)
и их инклудам, и в этом тексте искать уже define ?

Добавлено спустя 7 минут 41 секунду:
Меню->Поиск->Найти в файлах
не ищет в директивах, от слова совсем
ssnakess
новенький
 
Сообщения: 47
Зарегистрирован: 24.09.2011 23:08:55

Re: условная компиляция, DEFINE в lpr

Сообщение Tango » 16.05.2024 14:57:51

В каждый модуль проекта добавить строку {$I Defines.pas}

А в нём (файле) уже разместить нужные дефайны.
Аватара пользователя
Tango
постоялец
 
Сообщения: 160
Зарегистрирован: 31.05.2012 17:07:30

Re: условная компиляция, DEFINE в lpr

Сообщение ssnakess » 16.05.2024 15:45:41

Tango писал(а):В каждый модуль проекта добавить строку {$I Defines.pas}

А в нём (файле) уже разместить нужные дефайны.


Я так и делал сперва, но это архи не удобно, учитывая что некоторые модули я использую как библиотеку
т.е. в ней находятся функции не только определенного проекта, а просто общие, которые я периодически юзаю в других проектах
и если идти по принципу {$I mydefines.def}
тогда мне нужно в каждом своем проекте, где я юзаю этот библиотечный модуль - шарашить этот файлик с дефайнами - что черевато - человек существо забывчивое :))

т.е. путь с установкой дефайнов в настройках проекта - самое оно, тогда в принципе если и забудешь определить дефайн то ничего страшного не случиться :)
Но вот вопрос, а как узнать какие дефайны есть в проекте, т.е. вытащить их из всех модулей включенных в uses (не только файлов проекта, а всех модулей включенных в uses)
ssnakess
новенький
 
Сообщения: 47
Зарегистрирован: 24.09.2011 23:08:55

Re: условная компиляция, DEFINE в lpr

Сообщение Alexander » 16.05.2024 17:07:49

А переменные окружения или ключи командной строки с параметрами определений не подходят ?
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 723
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Re: условная компиляция, DEFINE в lpr

Сообщение RRYTY » 16.05.2024 17:30:24

Alexander писал(а):так, вот, а кроме как "путешествия" в ручном режиме, по всем подключенным модулям в проекте


Действительно,
ssnakess писал(а):человек существо забывчивое


С учетом мгновенно забытой темы об области видимости и возможностей команды grep (а есть еще и find) не надо путешествовать, тем более, в ручном режиме.
RRYTY
постоялец
 
Сообщения: 193
Зарегистрирован: 25.12.2021 10:00:32

Re: условная компиляция, DEFINE в lpr

Сообщение WAYFARER » 16.05.2024 22:28:12

RRYTY писал(а):С учетом мгновенно забытой темы об области видимости и возможностей команды grep (а есть еще и find) не надо путешествовать, тем более, в ручном режиме.

Ему (если я правильно понимаю) нужно все дефайны в проекте и всех его зависимостях.
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 531
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: условная компиляция, DEFINE в lpr

Сообщение ssnakess » 17.05.2024 10:25:45

WAYFARER писал(а):
RRYTY писал(а):С учетом мгновенно забытой темы об области видимости и возможностей команды grep (а есть еще и find) не надо путешествовать, тем более, в ручном режиме.

Ему (если я правильно понимаю) нужно все дефайны в проекте и всех его зависимостях.

Именно так.

Grep и find - штуки хорошие, но нафига мне ВСЕ что есть в папках лазаря? :))
Список дефайнов проекта, нужен
Т.е. только тех дефайнов, которые описаны в модулях используемых в проекте (в том числе и стандартные типа sysutils, если он подключен)
ssnakess
новенький
 
Сообщения: 47
Зарегистрирован: 24.09.2011 23:08:55

Re: условная компиляция, DEFINE в lpr

Сообщение WAYFARER » 17.05.2024 11:06:38

ssnakess писал(а):Grep и find - штуки хорошие, но нафига мне ВСЕ что есть в папках лазаря? )
Список дефайнов проекта, нужен
Т.е. только тех дефайнов, которые описаны в модулях используемых в проекте (в том числе и стандартные типа sysutils, если он подключен)


Единственное что приходит в голову это парсинг, рекурсивно пройти по всем uses и получить полный список файлов.

Если не секрет, то зачем вообще это нужно?
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 531
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: условная компиляция, DEFINE в lpr

Сообщение Alexander » 17.05.2024 11:12:11

Но в принципе вопрос правильный. Надо понять, что мешает разработчикам сделать дефайны в файле проекта глобальными.
Либо это не входит в представления разработчиков о Паскале, либо можно написать как пожелание улучшения или багрепорт.
Сами разработчики выходят из положения через инклюд файл, через переменные окружения и ключи командной строки.
А такого способа не предусмотрели.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 723
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

След.

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

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

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

Рейтинг@Mail.ru