7.1 폴더 구조
소프트웨어는 다음과 같이 네 가지 폴더로 구성된다:
- Project 폴더 – 소프트웨어 소스를 포함한다.
- Object 폴더 – 소프트웨어 빌드시 생성되는 중간 파일을 포함한다.
- Product 폴더 – 소프트웨어 산출물을 포함한다.
- Product data 폴더 – 소프트웨어 산출물에 의해 생성되는 데이터 파일을 포함한다.
7.1.1. Project 폴더
Project 폴더는 %PROJECT_ROOT%로 관리하며, 다음과 같은 하위 디렉토리를 포함한다:
Table: Project folder structure
No. | 폴더 | 내용 |
---|---|---|
1 | ots | 산출물에 포함되며, 제3자가 개발한 소프트웨어를 포함한다. |
2 | package | 산출물에는 포함되지 않으며, 설치 파일을 생성하기 위한 패키지 파일을 포함한다. 소프트웨어는 Inno Setup을 이용하여 설치 파일을 생성한다. |
3 | redist | 산출물에 포함되며, 재배포용 바이너리를 포함한다. |
4 | resource | 산출물에 포함되며, 리소스 파일을 포함한다. |
5 | source | 산출물에 포함되며, 프로젝트에서 개발하는 소프트웨어 소스를 포함한다. |
6 | test | 산출물에는 포함되지 않으며, 소프트웨어 소스를 테스트하기 위한 프로젝트를 포함한다 |
7 | utility | 산출물에는 포함되지 않지만, 소프트웨어 개발에 유용한 소프트웨어를 포함한다. |
8 | document | 소프트웨어 개발 문서를 포함한다. |
ots 폴더는 ots.sln을 포함하며, 다음과 같은 프로젝트를 포함한다:
Table: ots folder structure
No. | 폴더 | 내용 |
---|---|---|
1 | BugslayerUtil | 소프트웨어 디버깅을 위한 라이브러리. [DEBUGGING APP] 참조 |
2 | CppUnitLite | Non-GUI 모듈을 테스트하기 위한 라이브러리 |
3 | loki | 템플릿을 활용한 디자인 패턴 라이브러리. [Modern C++] 참조 |
4 | rapidxml | XML 파서 |
resource 폴더는 다음과 같은 리소스 파일을 포함하며, 다음과 같은 하위 폴더를 가진다:
Table: resource folder structure
No. | 폴더 | 내용 |
---|---|---|
1 | setup | 읽고 쓸 수 있는 리소스 파일을 포함한다. |
2 | nls | 다국어 문자를 표시를 위한 리소스 파일을 포함한다. |
3 | config | 읽기만 가능한 리소스 파일을 포함한다. |
4 | probe | 프로브 리소스 파일을 포함한다. |
source 폴더는 다음과 같은 하위 폴더를 가진다:
Table: source folder structure
No. | 폴더 | 내용 |
---|---|---|
1 | include | include 파일들을 포함한다. |
2 | swa | 소프트웨어 아키텍처 모듈을 포함한다. |
3 | scanner | Scanner 소프트웨어 모듈을 포함한다. |
4 | nonscanner | 환자 관리 모듈, Setup 모듈 등을 포함한다. |
utility 폴더는 다음과 같은 하위 폴더를 가진다:
Table: utility folder structure
No. | 폴더 | 내용 |
---|---|---|
1 | xls2mc | Excel 파일로 정리된 다국어를 프로그램 내에서 사용하기 위한 리소스로 변환한다. |
7.1.2. Object 폴더
프로젝트를 빌드하면 생성되는 중간 파일은 %PROJECT_OBJ% 디렉토리로 관리한다.
7.1.3. Product 폴더
프로젝트 빌드의 산출물을 포함하며, %PRODUCT_ROOT%로 관리하며, 다음과 같은 하위 디렉토리를 포함한다:
Table: Product folder structure
No. | 폴더 | 내용 |
---|---|---|
1 | binary | 소프트웨어의 바이너리 파일을 포함한다. |
2 | debug | 소프트웨어의 디버깅 파일을 포함한다. 소프트웨어 설치 파일에는 포함되지 않는다. |
3 | library | 소프트웨어의 라이브러리 파일을 포함한다. |
4 | package | 소프트웨어의 설치 프로그램을 구성하기 위한 파일을 포함한다. |
5 | resource | 소프트웨어의 리소스 파일을 포함한다. |
6 | test | 프로젝트를 테스트하기 위한 프로그램. 소프트웨어 설치 파일에는 포함되지 않는다. |
7.1.4. Product data 폴더
Product data 폴더는 소프트웨어 산출물이 실행하며 생성하는 환자 데이터, 사용자가 변경한 setup data, 시스템 로그 등을 포함한다:
Table: Product data folder structure
No. | 폴더 | 내용 |
---|---|---|
1 | patient | 환자 데이터베이스 파일을 포함한다. |
2 | setup | 사용자가 저장한 setup 정보를 포함한다. |
3 | log | 로그를 포함한다. |
4 | temp | 소프트웨어 실행시 생성되는 임시파일을 포함한다. |
7.2. 환경변수 설정
소프트웨어는 아키텍처는 소프트웨어 개발 및 실행과 관련된 정보를 관리하기 위해 환경변수를 활용한다.
7.2.1. 기본 환경변수
소프트웨어 아키텍처의 기본 환경변수는 다음과 같다:
Table: Environment variables for general software architecture information
No. | 환경변수 | 내용 |
---|---|---|
1 | PRODUCT_NAME | 프로덕트 이름 |
2 | PROJECT_NAME | 프로젝트 이름. |
7.2.2. Product 환경변수
Product 폴더와 관련된 환경변수는 다음과 같다:
Table: Environment variables for product folder
No. | 환경변수 | 내용 |
---|---|---|
1 | PRODUCT_ROOT_BASE | 프로그램이 존재할 상위 폴더. C:\ |
2 | PRODUCT_ROOT | 프로덕트 디렉토리 루트. %PRODUCT_ROOT_BASE%%PRODUCT_NAME%\ |
3 | PRODUCT_BIN | 실행 파일이 존재하는 폴더. %PRODUCT_ROOT%binary\ |
4 | PRODUCT_RES | 실행 파일의 리소스가 존재하는 폴더. %PRODUCT_ROOT%resource\ |
5 | PRODUCT_CFG | Config resource folder. %PRODUCT_ROOT%resource\config\ |
6 | PRODUCT_STP | Setup resource folder. %PRODUCT_ROOT%resource\setup\ |
7 | PRODUCT_PRB | Probe resource folder. %PRODUCT_ROOT%resource\probe\ |
8 | PRODUCT_DBG | 디버깅 파일 존재하는 폴더. %PRODUCT_ROOT%debug\ |
9 | PRODUCT_LIB | 라이브러리가 존재하는 폴더. %PRODUCT_ROOT%library\ |
10 | PRODUCT_TEST | 테스트 프로그램이 존재하는 폴더. %PRODUCT_ROOT%test\ |
7.2.3. Product Data 환경변수
Product data 폴더와 관련된 환경변수는 다음과 같다:
Table: Environment variables for product data folder
No. | 환경변수 | 내용 |
---|---|---|
1 | PRODUCT__DATA_ROOT | 사용자 데이터가 존재하는 폴더. %PRODUCT_DATA_ROOT_BASE%%PRODUCT_NAME%Data\ |
2 | PRODUCT_PDB | 환자 DB가 존재하는 폴더. %PRODUCT_DATA_ROOT%patient_db\ |
3 | PRODUCT_LOG | 로그 파일이 존재하는 폴더. %PRODUCT_DATA_ROOT%log\ |
4 | PRODUCT_TMP | 임시 파일이 존재하는 폴더. %PRODUCT_DATA_ROOT%temp\ |
5 | PRODUCT_UPRB | 사용자가 저장한 Probe resource file이 존재하는 폴더. %PRODUCT_DATA_ROOT%probe\ |
6 | PRODUCT_USTP | 사용자가 저장한 Setup resource file이 존재하는 폴더. %PRODUCT_DATA_ROOT%setup\ |
7.2.4. Project 환경변수
Project 폴더와 관련된 환경변수는 다음과 같다:
Table: Environment variables for project folder
No. | 환경변수 | 내용 |
---|---|---|
1 | PROJECT_ROOT_BASE | 프로젝트의 상위 폴더 이름 |
2 | PROJECT_ROOT | 프로젝트 폴더 이름. %PROJECT_ROOT_BASE%%PROJECT_NAME%\ |
3 | PROJECT_DOC | 설계 문서가 존재하는 폴더. %PROJECT_ROOT%document\ |
4 | PROJECT_OTS | 오픈소스가 존재하는 폴더. %PROJECT_ROOT%ots\ |
5 | PROJECT_PKG | 소프트웨어 패키지 소스 파일이 존재하는 폴더. %PROJECT_ROOT%package\ |
6 | PROJECT_REDIST | 재배포 파일이 존재하는 폴더. %PROJECT_ROOT%redist\ |
7 | PROJECT_RES | 프로젝트 리소스가 존재하는 폴더. %PROJECT_ROOT%resource\ |
8 | PROJECT_CFG | Config 리소스가 존재하는 폴더. %PROJECT_ROOT%resource\config\ |
9 | PROJECT_STP | Setup 리소스가 존재하는 폴더. %PROJECT_ROOT%resource\setup\ |
10 | PROJECT_PRB | Probe 리소스가 존재하는 폴더. %PROJECT_ROOT%resource\probe\ |
11 | PROJECT_SRC | 프로젝트 소스가 존재하는 폴더. %PROJECT_ROOT%source\ |
12 | PROJECT_INC | 프로젝트 include 파일이 존재하는 폴더. %PROJECT_SRC%include\ |
13 | PROJECT_TEST | 테스트 프로그램 소소가 존재하는 폴더. %PROJECT_ROOT%ttest\ |
14 | PROJECT_UTIL | 유틸리티 프로그램 소스가 존재하는 폴더. %PROJECT_ROOT%utility\ |
7.2.5. Object 환경변수
Object 폴더와 관련된 환경변수는 다음과 같다:
Table: Environment variables for object folder
No. | 환경변수 | 내용 |
---|---|---|
1 | PROJECT_OBJ | 중간파일이 존재하는 폴더. c:\Objects\%PROJECT_NAME%\ |
7.3. Batch Files
소프트웨어는 개발과 관련해서 다음과 같은 배치 파일을 제공한다:
- de.bat – 환경변수 및 빌드 프로그램 환경변수를 설정한다.
- build.bat – 소프트웨어를 빌드한다.
- cr.bat – Project 폴더의 resource 폴더를 Product 폴더로 복사한다.
- clean.bat – Project 폴더를 정리하기 위해 Project 폴더의 중간 파일을 삭제한다.
7.4. Visual Studio Project Settings
7.4.1. CPP Project
CPP 프로젝트를 폴더 구조에 따라 빌드하기 위해, 다음과 같이 프로젝트 속성(Configuration Properties)을 설정한다:
- General에서,
- Output Directory를 $(PRODUCT_BIN)으로 설정한다.
- Intermediate Directory를 Configuration에 따라 다음과 같이 설정한다:
- 릴리즈 빌드, $(PROJECT_OBJ)$(SolutionName)\$(ProjectName)\r\
- 디버그 빌드, $(PROJECT_OBJ)$(SolutionName)\$(ProjectName)\d\
- Target Name을 Configuration에 따라 다음과 같이 설정한다:
- 릴리즈 빌드, $(ProjectName)
- 디버그 빌드, $(ProjectName)d
- C/C++ > General에서,
- Additional Include Directories에 $(PROJECT_INC);$(PROJECT_OTS)를 추가한다.
- Warning Level를 /W4로 설정한다.
- Treat Warnings As Errors를 /WX로 설정한다.
- C/C++ > Preprocessor에서,
- Configuration Type이 .dll인 경우, Processor Definitions에 프로젝트 이름에 대문자로 표기하고 _EXPORT를 붙인다. (예, SCANNER_EXPORT)
- Linker > General에서
- Additional Library Directories에 $(PRODUCT_LIB)를 추가한다.
- Linker > Debugging에서
- Generate Debug Info를 /DEBUG:FULL로 설정한다.
- Generate Program Database File를 $(PRODUCT_DBG)$(TargetName).pdb로 설정한다.
- Generate Map File을 /MAP으로 설정한다.
- Map File Name을 $(PRODUCT_DBG)$(TargetName).map으로 설정한다.
- Build Events > Post-Build Event에서
REM if Configuration Type is .dll if exist $(OutDir)$(TargetName).exp move $(OutDir)$(TargetName).exp $(PRODUCT_LIB) if exist $(OutDir)$(TargetName).lib move $(OutDir)$(TargetName).lib $(PRODUCT_LIB) REM if there is a resource file, copy it to the resource folder if not exist $(PRODUCT_CFG)$(ProjectName) mkdir $(PRODUCT_CFG)$(ProjectName) copy *.xml $(PRODUCT_CFG)$(ProjectName)\ |
REM if Configuration Type is .exe REM if there is a resource file, copy it to the resource folder if not exist $(PRODUCT_CFG)$(ProjectName) mkdir $(PRODUCT_CFG)$(ProjectName) copy *.xml $(PRODUCT_CFG)$(ProjectName)\ |