вложенные директивы / условия IFDEF

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

вложенные директивы / условия IFDEF

Сообщение sunjob » 01.07.2020 14:51:34

добрый день

проект состоит из 2х файлов
Код: Выделить всё
main.pas - главный
app.pas  - инструментарий


инструментарий "подключается модулем"
Код: Выделить всё
uses  ... app;


в обоих используются "препороцессорные условия"
Код: Выделить всё
{$IFDEF DEBUG}
..
{$ENDIF}


условие срабатывает только каждый "сам для своего модуля", т.е. если сделать установку в обоих модулях
Код: Выделить всё
{$DEFINE DEBUG}

в главном модуле, естественно, "установка" сделана до uses

добавление ключа
Код: Выделить всё
fpc ... -dDEBUG ...

не помогает, условие срабатывает только в главном модуле
Аватара пользователя
sunjob
новенький
 
Сообщения: 41
Зарегистрирован: 12.01.2011 15:19:54

Re: вложенные директивы / условия IFDEF

Сообщение Mirage » 01.07.2020 15:13:37

Так и задумано. Если надо, чтоб можно было в одном файле задавать дефайны, выносишь их в .inc и подключаешь его везде через {$I ...}
Mirage
энтузиаст
 
Сообщения: 875
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: вложенные директивы / условия IFDEF

Сообщение sunjob » 01.07.2020 15:20:46

сработала, спасибо

... только, все равно не понятно, почему не срабатывает
Код: Выделить всё
fpc ... -dDEBUG ...


зачем он тогда нужен, этот ключ, если проканывает только на главном модуле? ... не логично
Аватара пользователя
sunjob
новенький
 
Сообщения: 41
Зарегистрирован: 12.01.2011 15:19:54

Re: вложенные директивы / условия IFDEF

Сообщение iskander » 01.07.2020 16:48:18

Что именно не срабатывает?

main.pas:
Код: Выделить всё
program main;

uses app;

procedure Test;
begin
{$ifdef debug}
  WriteLn('debug mode is defined in main');
{$endif}
end;

begin
  Test;
  app.Test;
end.

app.pas:
Код: Выделить всё
unit app;

interface

procedure Test;

implementation

procedure Test;
begin
{$ifdef debug}
  WriteLn('debug mode is defined in app');
{$endif}
end;

end.

сборка:
Код: Выделить всё
E:\fpc64\bin\x86_64-win64\fpc.exe -CX -O3 -Xs -XX -g- -dDEBUG E:\test_param\main.pas -oE:\test_param\prog.exe

печатает:
Код: Выделить всё
debug mode is defined in main
debug mode is defined in app
iskander
постоялец
 
Сообщения: 290
Зарегистрирован: 08.01.2012 18:43:34

Re: вложенные директивы / условия IFDEF

Сообщение sunjob » 01.07.2020 17:44:02

что именно? ну ... то именно и не срабатывает ... :о) условие, что находится во 2 модуле :о)

доберусь до кода, уточню, что у меня там нашлепано :о)

п.с. функции во втором модуле у меня вызываются напрямую, по имени, не думаю, что из-за этого...
Аватара пользователя
sunjob
новенький
 
Сообщения: 41
Зарегистрирован: 12.01.2011 15:19:54

Re: вложенные директивы / условия IFDEF

Сообщение Дож » 01.07.2020 21:57:33

-dDEBUG должен применяться глобально ко всем модулям.

С чем может быть связано указанное в первом посте поведение: если уже был скомпилирован app.pas без DEBUG и в нём не было изменений (т.е. fpc видит свежие app.ppu и app.o), то fpc не пересоберёт его автоматически даже при изменении командной строки (и DEBUG, соответственно, не применится). Нужно touch'нуть или внести номинальное изменение в app.pas.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 854
Зарегистрирован: 12.10.2008 16:14:47

Re: вложенные директивы / условия IFDEF

Сообщение sunjob » 01.07.2020 22:30:33

да, спасибо за пендиль :о) конечно, голова моя садовая! ну а чЁ мы хотели...?! :о)

забываю про свои хитрушки и настройки:
Код: Выделить всё
FPC_RAM_DIR_BUILD = /dev/shm/tmp/fpc.build


естественно, обьектники не чистим, т.к. "их", вроде как, и ... не видно ... :о)

еще раз спасибо
Аватара пользователя
sunjob
новенький
 
Сообщения: 41
Зарегистрирован: 12.01.2011 15:19:54


Вернуться в Free Pascal Compiler

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

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

Рейтинг@Mail.ru