Я просто попробовал
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
begin
{$IFDEF CONSOLE}
beep;
{$ENDIF}
end.
и ожидаемый услышать a beep
во время времени выполнения, но нет. Следующие тестовые работы, хотя:
if IsConsole then
beep;
Почему время компиляции не тестирует работу? Насколько я могу понять из этого документа, он уверенный должен работать.
Если в опциях компоновщика выбрать "Generate console application", будет определено 'CONSOLE'.
Это не работает в *.dpr файле, но это нормально в модуле (вызов MakeBeep из консоли *.dpr):
unit Unit1;
interface
uses
SysUtils;
procedure MakeBeep;
implementation
procedure MakeBeep;
begin
{$IFDEF CONSOLE}
beep;
{$ENDIF}
end;
Директива $APPTYPE
определяет, следует ли создавать консоль Win32 или графическое приложение пользовательского интерфейса, это НЕ директива компилятора.
{$ifdef}
тестирует пользовательские директивы компилятора, заданные операторами {$define name}
. Как и в
{$define KeepDlibTempFiles}
Вместо него можно использовать 'IsConsole' (как вы уже выяснили).