라자루스 조건 컴파일 방법(Lazarus Conditional compilation)

2021. 7. 5. 22:37 컴퓨터/프로그래밍

Lazarus Conditional compilation

라자루스에서 디버깅을 위해 DebugSever 툴로 문자열 메시지를 전송해서 출력하는 방법을 소개했는데요, 프로젝트 옵션에서 디버거 옵션을 꺼도 DebugServer로 메시지를 전송하는 SendDebug 함수는 계속 남아서 DebugServer로 전송합니다. SendDebug 함수를 겨우 몇 개 사용했다면 제거하겠지만, 여기저기 많이 사용했다면 삭제하기 어렵죠.

uses
  dbugintf;

procedure TForm1.btnCloseClick(Sender: TObject);
begin
  SendDebug( '종료 버튼을 클릭했습니다.');
  Close;
end;

procedure TForm1.btnCopyWindowClick(Sender: TObject);
begin
  SendDebugFmt( '%d + %d = %d', [1, 2, 3]);
end;

나중에 필요할 수도 있으므로 조건 컴파일을 사용하는 것이 더 편하고 유용합니다. 라자루스에는 아래와 같은 조건 컴파일 지시어가 있습니다.

  • {$DEFINE}
  • {$IFDEF}
  • {$ENDIF}
  • {$IFNDEF}
  • {$IFOPT}
  • {$ELSE}
  • {$ELSEIF}
  • {$UNDEF}

프로그램 내에서 {$DEFINE Use_DebugServer}을 넣어서 조건 컴파일을 위한 값을 정의합니다. Use_DebugServer는 임의로 만든 문자열이니다. 필요한 내용에 따라 다른 정의와 구별되는 문자열을 사용하면 됩니다.

이렇게 정의한 후에 {$IFDEF Use_DebugServer} 디버깅 메시지 전송 {$ENDIF}처럼 조건 컴파일 사이에 DebugServer와 관련된 코드를 넣으면 됩니다.

{$DEFINE Use_DebugServer}

{$IFDEF Use_DebugServer}
uses
  dbugintf;
{$ENDIF}

procedure TForm1.btnCloseClick(Sender: TObject);
begin
  {$IFDEF Use_DebugServer}
  SendDebug( '종료 버튼을 클릭했습니다.');
  {$ENDIF}
  Close;
end;

이와 같이 코드를 작성할 수 있습니다. 만일 SendDebug 호출을 하고 싶지 않다면 {$DEFINE Use_DebugServer} 행만 주석 처리하거나 삭제하면 됩니다.

프로젝트 옵션에 정의 추가

{$IFDEF Use_DebugServer}
uses
  dbugintf;
{$ENDIF Use_DebugServer}

procedure TForm1.btnCloseClick(Sender: TObject);
begin
  {$IFDEF Use_DebugServer}
  SendDebug( '종료 버튼을 클릭했습니다.');
  {$ENDIF Use_DebugServer}
  Close;
end;

procedure TForm1.btnCopyWindowClick(Sender: TObject);
begin
  {$IFDEF Use_DebugServer}
  SendDebugFmt( '%d + %d = %d', [1, 2, 3]);
  {$ENDIF Use_DebugServer}
end;

▲ Use_DebugServer를 이용하여 조건 컴파일이 되도록 코딩을 했는데요, 이런 조건 컴파일은 하나의 소스 파일뿐만 아니라 필요한 곳 여러 파일에 작성할 수 있습니다. 그렇다면 모든 소스 파일에 {$DEFINE Use_DebugServer}을 넣어 주고, 필요 없으면 모든 파일을 열어서 {$DEFINE Use_DebugServer}을 주석 처리하거나 삭제해 주어야 합니다.

이렇게 조건 컴파일을 위한 정의를 소스 파일에 넣기보다는 컴파일 옵션에 넣는 것이 더 편합니다.

▲ 프로젝트 옵션>>빌드 모드에 있는 점 3개 더보기 버튼을 클릭합니다.

▲ "Create Debug and Release modes" 버튼을 클릭하면 자동으로 디버그와 릴리즈 버전을 위한 컨디션이 추가됩니다.

▲ 디버그와 배포판을 위한 빌드 모드 두 가지가 추가되었습니다.

▲ 디버그 모드를 선택한 후 Custom Options에서 Defines 버튼을 클릭합니다.

▲ Use_DebugServer를 입력하고 추가(Add) 버튼을 클릭한 후 체크 박스를 체크해서 "OK" 버튼을 클릭합니다.

▲ 컴파일 옵션에서 Use_DebugServer 정의가 추가되었습니다.

▲ 이제 빌드 모드를 Debug로 선택하면 Use_DebugServer 조건에 걸리는 항목은 모두 활성화된 것을 볼 수 있고 실행하면 DebugServer로 문자열이 전송됩니다.

▲ Release로 선택하면 Use_DebugServer 정의가 없기 대문에 {IFDEF Use_DebugServer} 조건에 걸리는 내용은 모두 비활성화된 것을 볼 수 있습니다. 실행해서 보며 DebugServer로 문자열이 전송되지 않음을 확인할 수 있습니다.

이렇게 라자루스에는 프로젝트 옵션을 통해 조건 문자열을 정의하면 조건 컴파일을 더욱 쉽고 편하게 사용할 수 있습니다.

이 댓글을 비밀 댓글로

티스토리 로그인이 풀리면 여기를 클릭하세요.

error: Content is protected !!