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

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

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

Ответить
Аватара пользователя
sunjob
постоялец
Сообщения: 176
Зарегистрирован: 12.01.2011 14:19:54

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

Сообщение sunjob »

добрый день

проект состоит из 2х файлов

Код: Выделить всё

main.pas - главный
app.pas  - инструментарий


инструментарий "подключается модулем"

Код: Выделить всё

uses  ... app;


в обоих используются "препороцессорные условия"

Код: Выделить всё

{$IFDEF DEBUG}
..
{$ENDIF}


условие срабатывает только каждый "сам для своего модуля", т.е. если сделать установку в обоих модулях

Код: Выделить всё

{$DEFINE DEBUG} 

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

добавление ключа

Код: Выделить всё

fpc ... -dDEBUG ...

не помогает, условие срабатывает только в главном модуле
Mirage
энтузиаст
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia
Контактная информация:

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

Сообщение Mirage »

Так и задумано. Если надо, чтоб можно было в одном файле задавать дефайны, выносишь их в .inc и подключаешь его везде через {$I ...}
Аватара пользователя
sunjob
постоялец
Сообщения: 176
Зарегистрирован: 12.01.2011 14:19:54

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

Сообщение sunjob »

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

... только, все равно не понятно, почему не срабатывает

Код: Выделить всё

fpc ... -dDEBUG ...


зачем он тогда нужен, этот ключ, если проканывает только на главном модуле? ... не логично
iskander
энтузиаст
Сообщения: 627
Зарегистрирован: 08.01.2012 18:43:34

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

Сообщение iskander »

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

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
Аватара пользователя
sunjob
постоялец
Сообщения: 176
Зарегистрирован: 12.01.2011 14:19:54

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

Сообщение sunjob »

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

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

п.с. функции во втором модуле у меня вызываются напрямую, по имени, не думаю, что из-за этого...
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

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

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

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

С чем может быть связано указанное в первом посте поведение: если уже был скомпилирован app.pas без DEBUG и в нём не было изменений (т.е. fpc видит свежие app.ppu и app.o), то fpc не пересоберёт его автоматически даже при изменении командной строки (и DEBUG, соответственно, не применится). Нужно touch'нуть или внести номинальное изменение в app.pas.
Аватара пользователя
sunjob
постоялец
Сообщения: 176
Зарегистрирован: 12.01.2011 14:19:54

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

Сообщение sunjob »

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

забываю про свои хитрушки и настройки:

Код: Выделить всё

FPC_RAM_DIR_BUILD = /dev/shm/tmp/fpc.build


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

еще раз спасибо
Аватара пользователя
sunjob
постоялец
Сообщения: 176
Зарегистрирован: 12.01.2011 14:19:54

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

Сообщение sunjob »

###!!! UPDATE !!!###

как пропустить

посредством сборки с пом-ю lazbuild?
в аргументах ком-строки ничего интересного не нашел :о)

зы понятное дело, в самой IDE это - без проблем :P
Аватара пользователя
sunjob
постоялец
Сообщения: 176
Зарегистрирован: 12.01.2011 14:19:54

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

Сообщение sunjob »

UPDATE
т.е. нет такой возможности? только непосредственным подключением файла с настройками проекта?
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

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

Сообщение zub »

Настроив в lpi режимы сборки и выбрав соответствующий с помощью --build-mode
Аватара пользователя
Alexx2000
постоялец
Сообщения: 490
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи
Контактная информация:

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

Сообщение Alexx2000 »

В проекте Lazarus создать два режима сборки Release и Debug. Первый без дефайна, второй соответственно с ним. Сборка:

Release (без дефайна):

Код: Выделить всё

lazbuild --bm=release test.lpi

Debug (с дефайном):

Код: Выделить всё

lazbuild --bm=debug test.lpi
Аватара пользователя
sunjob
постоялец
Сообщения: 176
Зарегистрирован: 12.01.2011 14:19:54

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

Сообщение sunjob »

посмотрим... :о)
Ответить