월요일, 6월 23, 2008

WINCEPROJ, WINCETREE, OS project, WINCEPROJ project

WINCEPROJ와 WINCETREE가 비슷하게 사용되는 것 같은데 차이가 무엇일까 조사해 봤다.

WINCEPROJ
Building powerful platforms with windows ce에서의 설명 다음과 같다.

"Project의 scope를 나타낸다. Module이 여러 project에 걸쳐서 사용될 것이라면 COMMON으로 설정되고, 현재의 project에서만 사용될 것이라면 current로 설정한다."

그러나 이것은 예전 version의 wince (아마도 3.2. 이 책은 3.2를 기준으로 쓰여졌다.)에서만 유효한 설명일 것 같다. WINCE5.0에서 WINCEPROJ는 makefile이나 sources에서 주로 directory 이름을 나타내는데 사용되는데 이것이 current로 설정되는 경우는 전혀 찾아 볼 수 없다.

사용되는 방식을 검색해 보면 다음을 알 수 있다.
여기서 _PROJECTROOT는 "WINCE500\PBWorkspaces\내 PROJECT 이름\WINCE500\내 BSP 이름"을 나타낸다. public이나 private아래의 sources, sources.cmn, makefile들에서 정의된다.

1. Public 바로 아래의 directory이름(특정 기능을 지원하는 component들과 core OS component인 common)을 나타내기 위해 사용된다. private 아래의 sources.cmn이나 sources에서도 사용되는데, 이때는 _WINCETREE의 값은 common으로 설정된다. private에 존재하는 source code로 부터 생성되는 library나 target이 실제로 존재하는 있는 위치인 common아래쪽의 directory를 나타내기 때문인 것 같다.

2. Cefilter로 intialization file들($(WINCEPROJ).reg, $(WINCEPROJ).dat, $(WINCEPROJ).bib, $(WINCEPROJ).db)들을 처리하여 intermediate directory ($(_PROJECTROOT)\cesysgen\oak\file)에 저장해 두기위해 사용된다.

3. Makeimg에게 어느 module이 resource binding이 필요한지 알리는 file인 $(WINCEPROJ).loc을 intermediate directory인 $(_PROJECTROOT)\cesysgen\oak\target에 생성한다.

4. WINCEREL=1일때 intermediate directory($(_PROJECTROOT)\cesysgen\oak\file\)에 있는 intialization file($(WINCEPROJ).*)들을 $(_FLATRELEASEDIR)로 copy하기 위해 사용되기도 한다.

즉 component를 나타내는 public아래의 directory를 나타내기 위해, initialization file의 이름을 나타내기 위해, makeimg에게 어떤 module들이 resource binding이 필요한지 알려주는 loc file의 이름을 나타내기 위해 사용된다.
또 아래의 내용을 좀더 보면 알겠지만 WINCETREE는 정의되지 않고 WINCEPROJ만 정의된 경우 WINCEPROJ project인것을 나타내기 위해서 사용된다.

WINCETREE
검색해 보면 다음을 알 수 있다.

1. Public아래의 common을 포함한 각 component directory에 있는 sources.cmn에서 그 component directory 이름을 나타낸다.

2. Makefile.def의 내용에 따르면 sources file이 include되기 전에 _COMMONPUBROOT와 __PROJROOT값을 정의한다. 이때 다음 각 경우에 따라서 다른 값으로 정의 된다.

*sysgen중 인 OS project - unsysgened input libs들을 가지고 있고 결과물이 projectroot\cesysgen에 생긴다.
OS projects during SYSGEN (which get unsysgened input libs & build into projectroot\cesysgen)
_COMMONPUBROOT=$(_PUBLICROOT)\common
__PROJROOT = $(_PROJECTROOT)\cesysgen


*compile중인 OS project - unfiltered header file들을 가지고 있고 결과물이 자신의 public tree에 생긴다.
OS projects during compile (which always get the full unfiltered headers & build into their own public tree)
_COMMONPUBROOT=$(_PUBLICROOT)\common
__PROJROOT = $(_PUBLICROOT)\$(WINCEPROJ)


*WINCEPROJ project - 이미 sysgen된 header와 lib들을 필요로 하지만 결과물은 자신의 public tree에 생긴다.
WINCEPROJ projects (which want sysgened headers & libs, but want to build into their *own* public trees)
_COMMONPUBROOT=$(_PROJECTROOT)\cesysgen
__PROJROOT = $(_PUBLICROOT)\$(WINCEPROJ)


*일반 user project - 이미 sysgen된 header와 lib들을 가지고 있고 결과물은 최종 project public tree에 생긴다.
regular user projects (which get sysgened headers & libs & build into the final project public tree)
_COMMONPUBROOT=$(_PROJECTROOT)\cesysgen
__PROJROOT = $(_PROJECTROOT)

OS project란 sources.cmn에서 WINCETREE가 정의되어 있으며 public\WINCETREE\cesysgen\makefile이 존재하는 것을 이야기 한단다.
따라서 WINCETREE 자체는 public\WINCETREE\cesysgen\makefile의 존재를 확인하기 위해서, 현재 OS project compile중 이란 것을 나타내기 위해서 사용된다.

OS project와 WINCEPROJ project
OS project compile중인가 아니면 WINCEPROJ project중인가에 따라서 결국 어디에 dependency를 가지며 어디로 결과물이 생긴다는 것이 정의된다.
WINCEPROJ project - sysgen중이 아니고 WINCETREE가 정의되어 있지 않으면서 WINCEPROJ만 정의된 것으로 이때는 sysgen의 결과물에 dependecy를 갖고 자신의 public directory에 결과물이 생성된다.
OS project - WINCETREE가 정의 된 것으로 sysgen되기 전의 unfiltered header file에 dependency를 갖고 결과물은 자신의 public directory에 생성된다. (sysgen은 OS project에 대해서 이루어 진다는 것은 당연한 것라 하겠다.)

다 써놓고 보니 내가 봐도 무슨소린지 잘 모르겠다는 생각도 든다.
역시 Windows CE에서 제일 어려운것은 BUILD다.

댓글 1개:

sousa :

r7d99s6r48 z8z47i9p91 j5b90d8t54 t4m15p6o20 n7h22b8t39 r7j54v1o22