LazarusCompleteGuide:1.3

From 흡혈양파의 번역工房
Jump to: navigation, search

프로젝트

델파이와 라자루스 프로젝트는 공통점이 많다. 무엇보다 둘은 프로그램의 생성을 주로 한다. 특히 델파이의 패키지는 윈도우 라이브러리를 (.bpl 파일) 생성하고 라자루스 패키지는 상대적으로 큰 프로젝트를 주로 모듈화한다. 라자루스에서 프로젝트와 패키지는 델파이의 것과 다르게 개발되어 왔는데, 라자루스는 특히 플랫폼 독립성의 필요성과 제약에 주의를 기울였다.


프로젝트 파일

델파이에서 프로젝트는 .dpr 파일에 의해 정의된다. 이 파일은 프로젝트에 속한 폼, 유닛, 패키지, 그리고 어떠한 파라미터를 컴파일러에 전달해야 하는지에 대한 정보를 포함한다. 델파이 버전에 따라 다른 파일에 추가 정보도 (검색 경로와 같은) 포함된다. 라자루스에서는 프로젝트가 .lpi 파일에 의해 정의된다. 프로젝트에는 주로 .lpr 파일이 포함되는데, 이는 델파이의 .dpr 파일과 유사한 구조를 가진 메인 파일이다. 하지만 프로젝트에는 .lpr 파일에 열거된 것보다 더 많은 유닛을 가질 수도 있으며 더 많은 패키지를 사용하기도 한다.


모든 컴파일러 설정은 .lpi 파일에 보관된다. 모든 라자루스 구성 파일과 마찬가지로 해당 파일은 XML 포맷으로 생성된다. 해당 파일 내 모든 데이터는 IDE 대화창에서 편집이 가능하다.


다시 명확하게 말하자면: .lpr 파일은 델파이에서와 마찬가지로 주로 IDE에 의해 관리되지만 .lpi 파일이 더 중요하다.


예를 들어, 델파이의 .dpr 파일은 uses 절에 다음 엔트리(entry)를 가진다:

unit1 in 'Directory\Unit1.pas' {Form1};


델파이는 어떤 유닛이 프로젝트에 속하는지와 어디에 위치하는지를 in 키워드로부터 인식한다. 반대로 라자루스는 검색 경로를 사용하고 in 경로를 생성하지 않는데, 그 이유는 윈도우가 아닌 플랫폼에서 사용 시 문제가 발생할 수 있기 때문이다.


예를 들어, Linux, BSD, MacOS X에서는 소문자를 항시 고려해야 한다. 'Directory'의 첫 자는 대문자로, 나머지는 소문자로 쓰는 것도 필수적이다.


그 뿐 아니라 라자루스는 각 프로젝트에 대해 세션 데이터를 저장하여 다음에 프로젝트를 열 때 IDE로 하여금 전체 상태를 복구시키도록 허용한다. IDE가 닫혀 있거나 다른 프로젝트가 열린 경우 IDE 혹은 프로젝트가 마지막으로 닫혀있던 시점으로 모두 복구시키는데, 개방 파일, 커서 위치, 중단점(breakpoint), 점프 기록(jump history) 등도 포함된다. 세션 데이터는 보통 .lpi 파일에 저장되지만, Project ⇒ Project Options ⇒ Session에서 옵션을 구성하면 구분된 파일로 저장할 수도 있다.


델파이 프로젝트를 라자루스 프로젝트로 변환하는 과정을 단순화시킨 도구는 Tools ⇒ Convert Delphi project to Lazarus project...에서 이용할 수 있다.


델파이는 여러 개의 프로젝트를 하나의 프로젝트 그룹으로 번들하는 기능도 있다. 라자루스에는 이러한 기능을 구현하고 있지 않으며 패키지를 이용해 큰 프로젝트를 구조화한다.


모든 파일명과 검색 경로는 라자루스 프로젝트와 관련된 폼에 저장되어 다른 운영체제의 컴퓨터로 프로젝트를 복사하기가 수월하다. 변환은 할 필요가 없다. 이는 SVN과 같은 버전의 제어 시스템을 이용해 프로젝트를 관리하도록 해주고, 여러 명의 프로그래머들이 다른 운영체제에서 동시에 하나의 프로젝트를 작업하도록 해준다. 라자루스의 개발 자체가 이러한 사용의 예이다.


매크로를 이용해 구현되는 절대적 검색 경로는 상대적으로 적다. 예를 들어, 매크로 $(LazarusDir) 는 현재 라자루스 디렉터리를 나타낸다. 패키지 덕분에 절대 경로는 거의 불필요하다. 이것이 어떻게 작용하는지는 본 저서 다른 부분에서 논하고자 한다.


델파이와 다르게 사전 컴파일된 유닛을 모두 .ppu 파일 형태로 (델파이의 .dcu 파일에 해당) 묶는 전역 디렉터리가 없다. 각 프로젝트와 각 패키지는 이에 해당하는 고유의 디렉터리를 가진다. 이러한 엄격한 분리로 인해 각 패키지마다 잘 정의되고 충돌이 없는 컴파일러를 구성하도록 허용하는 동시 서로 다른 버전이나 대상(target) 간에 빠르고 깔끔한 변경을 조장한다.


예를 들어, 윈도우에서 실행할 프로그램은 Windows 32 또는 Windows CE 용으로 컴파일될 수 있다. 특별 패키지 설치도 불필요하다. 이와 관련된 내용도 본 저서의 다른 부분에서 자세히 설명하겠다.


델파이 패키지는 라이브러리에 컴파일된 유닛 집합이다 (DDL 또는 .bpl).


메인 파일은 .dpk 확장자를 가진다. 라자루스 패키지는 i18n, FPDoc, 상속과 관련된 고유의 컴파일러 구성과 데이터를 포함하는 파일 집합이다 (i18n이란 '국제화', 즉 문자열을 다른 언어로 해석함을 의미하고, FPDoc은 파스칼 코드를 문서화하는 프리 파스칼 도구이다). 패키지가 라이브러리를 생성할지는 모르지만 라자루스 패키지는 상대적으로 큰 프로젝트를 구조화하거나 유닛을 분배 및 재사용하는 데 사용된다. 메인 파일은 .lpk 확장자를 가지며, 모든 라자루스 구성 파일과 같이 XML 파일로 되어 있다. 각 패키지는 고유의 설정과 검색 경로를 갖는다. 또한 각 패키지는 스스로 다른 패키지를 사용하고 다른 패키지에 의해 사용된다. 이러한 목적으로 상속되는 내용을 정의할 수 있다.


아래와 같은 컴파일러 설정이 상속될 수 있겠다:

  • 검색 경로 (유닛, 오브젝트 파일, 링커, 소스 코드)
  • 컴파일러 파라미터
  • 링커 파라미터


대체적으로 차이점도 몇 가지 있으므로 델파이 배경에서 넘어 온 라자루스 사용자들은 '패키지'와 관련된 절을 모두 읽어보길 권한다 (1.5절을 참고). 각 패키지는 리소스를 활용하는 고유의 컴파일을 가질 수 있다. FPC는 컴파일 도중에 리소스 문자열이 있는 각 유닛마다 .rst 파일을 생성한다.


i18n 옵션이 활성화되고 하위 디렉터리가 명시되어 있는 경우 라자루스는 자동으로 .po 파일을 생성한다. 이는 많은 오픈소스 세계화 프로그램들이 인식하는 단순한 텍스트 파일로, .po 파일의 에디터는 모든 플랫폼에서 이용 가능하다. 각 패키지는 소스 코드에 대한 문서와 도움말을 제공한다.


라자루스에는 FPDoc의 내장 지원과 pasdoc 기호의 하위집합이 있다. 이를 활성화시키기 위해서는 Options ⇒ Project Options ⇒ i18n 에서 패키지 또는 프로젝트에 대해 FPDoc지원을 활성화시키고 FPDoc 문서를 어느 디렉터리에 저장할 것인지 지정해야 한다. 현재 FPC는 일반적인 동적 라이브러리만 생성 가능하며 델파이 패키지 개념을 다른 플랫폼으로 복사할 수는 없다. 다시 말해, 이니셜리제이션과 파이널리제이션 섹션이 자동으로 호출되지 아니하고, RTL 패키지와 다른 FPC 패키지를 사용 준비가 된(ready-made) DLL 또는 .so 파일로 이용할 수 없음을 의미한다.


숙련된 델파이 사용자에게 가장 큰 차이점은 델파이의 경우, 패키지, 버전, 프로젝트의 분리가 어렵고 프로젝트와 패키지를 다른 컴퓨터로 복사하기가 까다롭도록 전역적 검색 경로를 주로 작업한다는 점일 것이다. 라자루스는 컨텍스트에 민감한 검색 경로에만 거의 의존하기 때문에 프로젝트 또는 패키지마다 각 검색 경로가 할당된다. 이러한 이유로 라자루스 프로젝트와 패키지는 경로를 전혀 수정하지 않고 다른 컴퓨터나 운영체제로 쉽게 복사할 수 있다. 그 결과 수정해야 하는 경로 수가 델파이에 비해 적고, 대부분의 경우 델파이 프로젝트를 패키지로 변환 시 경로만 제거하면 된다. 사실상 라자루스에서는 원하는 운영체제 간 동적인 차이와 매크로가 경로에 포함된 경우에만 검색 경로의 편집을 요한다. 델파이에서는 너무 많은 검색 경로를 입력하더라도 역효과가 나타나지 않는 것이 보통이지만, 라자루스에서는 컴파일러가 다른 패키지에 속한 소스 파일을 검색하여 한 번 이상 컴파일하게 되는 결과를 야기할 수도 있다. 이와 관련된 내용은 1.5절에서 더 상세히 논하도록 하겠다. 델파이 패키지를 라자루스 패키지로 변환하는 업무를 단순화시킨 도구가 있다. 도구는 Tools ⇒ Convert Delphi package to Lazarus package... 에 위치한다.