하두고 님이 쓰신 글 :
: WindowsXP_Home에 DelphiXE2 정품을 구매하여 사용하고 있습니다.
:
: 빌더님 도움으로 구글 코드사이트에서 MustangPeak를 다운 받았습니다.
:
: 다운받은 컴포넌트는
: CommonLIB, EasyListView, VirtualTreeView, VirtualShellTools
: 이렇게 4개인데요.
:
: CommonLIB와 EasyListView는 이상없이 설치가 잘 되었습니다.
:
: 그런데 VirtualTree 설치 중
: VirtualTreesD는 이상없이 컴파일이 되고 Install도 되는데요.
:
: VirtualTreesR을 Compile 하면 에러메세지가 나옵니다.
: 이 에러메세지는 적어 놓지를 않았네요.
: 그런데 이상한건 Compile할때 에러가 나던 것이 Build를 하면 에러가 안납니다.
: 그리고 Build를 한 다음 Compile를 하면 이상 없이 진행되구요.
:
: 그런데 문제는 그 다음입니다.
: 마지막으로 VirtualShellTools를 설치해야 하는데
: VirtualShellToolsD16를 Compile하면
: [DCC Fatal error] VirtualTreesR.dpk(39) : F2048 Bed unit format : 'C:\Mustangpeak\VirtualTreeView\Source\VirtualTrees.dcu' - Excepted version 23.0, windows unicode(x64)
: 이렇게 나옵니다.
:
: 해외사이트의 도움을 받아
: VirtualTreesR에서 {$IMPLICITBUILD OFF}를 {$IMPLICITBUILD ON}으로 수정하니 VirtualTreesD는 에러가 없어졌습니다.
:
: 이렇게 하고 VirtualShellTools를 다시 컴파일 하면
: 이번에는
: [DCC Fatal error] VirtualTreesR.dpk(1) : E2225 Never build package 'VirtualTreesR' must be compiled
: 이렇게 나옵니다.
: 물론 앞에서 'VirtualTreesR'는 컴파일이 되었는데도요.
:
:
: 참고로
: Tool->Options->Delphi Option->Library에서 [32bit Windows]의 [Library Path]에는
: C:\MustangPeak\CommonLib\Delphi
: C:\MustangPeak\CommonLib\Source
: C:\MustangPeak\EasyListView\Delphi
: C:\MustangPeak\EasyListView\Source
: C:\MustangPeak\VirtualTreeView\Packages\Delphi XE2
: C:\MustangPeak\VirtualTreeView\Common
: C:\MustangPeak\VirtualTreeView\Source
: C:\MustangPeak\VirtualShellTools\Delphi
: C:\MustangPeak\VirtualShellTools\Source
: 이렇게 추가했습니다.
답변...
무조건 컴파일 하고 보자는 식으로 빌드 부터 하지 말고, 패키지 소스코드를 확인해서 상호 의존관계 부터
파악하는게 순서일 겁니다. 서로 의존적인 관계를 갖고 있는 패키지들을 컴파일 할 땐, 빌드 순서가 중요
하니까요.
{$IMPLICITBUILD ON} ... IMPLICITBUILD를 ON으로 해서 컴파일 하는 것은 결코 좋은 방법이 아닙니다.
특히 패키지들이 상호 의존적인 관계를 가질 땐.. 더욱 그렇죠. 설령 컴파일이 된다고 해도, 다음 단계의
빌드 과정에서 문제가 일어날 수 있기 때문입니다.
[DCC Fatal error] VirtualTreesR.dpk(1) : E2225 Never build package 'VirtualTreesR' must be compiled
위와 같은 빌드에러는... IMPLICITBUILD를 ON으로 설정하고 컴파해서 일어난 부작용으로 보입니다.
[DCC Fatal error] VirtualTreesR.dpk(39) : F2048 Bed unit format :
'C:\Mustangpeak\VirtualTreeView\Source\VirtualTrees.dcu' -
Excepted version 23.0, windows unicode(x64)
VirtualTreesR 패키지가 명시적으로 타겟 플렛폼이 지정되지 않은 채 빌드되다 보니까...
Win64 타겟 플렛폼으로 빌드 돼 버렸고, VirtualShellTools의 dcu 파일들과 오브젝트 속성이
서로 다르게 생성되어(32비트 dcu 파일과 64비트 dcu 파일의 충돌) 일어난 문제 같네요.
VirtualTreesR (.dproj)에 정의되어 있는 부분
<Platform Condition="'$(Platform)'==''">Win64</Platform> // Default로 Win64로 되어 있음
런타임과 디자인타임 모듈간의 종속성... 그리고... 이런 종속성을 갖는 모듈들 서로가 또 상호 종속적인
관계를 가질 때는... 사용자가 빌드과정에 개입 해줘야 합니다.
마이크로소프트 사의 Visual Studio 같은 개발환경은... 이 부분이 아주 잘 되어 있죠. 사용자가 빌드과정을
의도대로 완전히 콘트롤 할수 있는 것은 물론이고, 심지어는 GCC 같은 컴파일러를 개발환경 자체에 통합
시키는 것도 가능하고요.
그에 비하면 Embarcadero사의 개발환경은 이런 부분이 취약합니다.
RAD XE2 환경에선... 모듈간의 상호종속 관계에 따라서 수동으로 빌드하는 방식을 택하거나...
아니면 Build Events에서 Pre-build events 코맨드 스크립트를 정의해서 개입 하면 됩니다.
코맨드 스크립트를 정의해서 빌드하면... 개개의 패키지를 따로 install 할 필요 없이, 한번의 패키지 인스톨로 모든
패키지가 인스톨 되게 해주는 것도 가능하고요.
|