kkuzil.own@gmail.com

Posted
Filed under Development/Delphi

요즘 프로젝트에 프로그램이 늘어서 일일히 Release로 빌드하고 패키징하는게 여간 귀찮은게 아니다
사용에 따라서 빌드도 바꿔야 되서 define도 플러그 바꿔서 다시 컴파일 패키징.. 이휴
그래서 Batch파일로 일괄 빌드를 만들어서 손쉽게 쫙쫙 빌드해보자 생각했다.

일단 command 라인에서 빌드를 해야하는데.. Delphi에는 DCC32.exe를 이용해서 빌드하는걸로만 알고
일단 시도는 해보았지만..

Build Configuration을 지원하지 않아서 맞춰놓은 Release / Debug에 따라 컴파일 할 수가 없네..
이걸 어쩐다.. 하며 한참을 알아본 결과..

Delphi 2007부터 추가된 MSBuild가 있었다!
이놈을 사용하면 Build Configuration을 이용한 빌드도 할 수 있으며 DCC32.exe에서 쓰는 환경파일(cfg)도
생성할 필요가 없었다~ 아우.. 진작에 스펙좀 보고다닐껄..
2007쓴지 3년이 되가는거 같은데.. 이제야 이런기능이 있는지 알고 시행하고 말이지;;

어쨌든 이제라도 알면됐지머;;

아래는 작성한 스크립트 일부.

==============================================================================================

rem ========================================================
rem MSBuild 함수화(?)
rem 작성일 : 오후 5:39 2010-07-05
rem 수정일 : 오전 11:49 2010-07-07
rem 작성자 : sunk
rem 버  전 : v1.0
rem 마지막으로 수정하신 분 : sunk
rem ========================================================

rem 함수화 하는 방법이 없어서 Batch파일을 통해서 함수화 함~

rem MSBuild 명령줄 참조 = http://msdn.microsoft.com/ko-kr/library/ms164311(VS.90).aspx
rem MSBuild /? 해도 사용법 잘 나옴. (이해하는데는 부족하다)

rem ### Console Log
rem  ## /consoleloggerparameters(=/clp) - 콘솔 로그 사용 (default)
rem   # PerformanceSummary: 작업, 대상 및 프로젝트에 사용된 시간을 표시합니다.
rem   # NoSummary: 빌드 종료 시 표시되는 오류 및 경고 요약을 숨깁니다.
rem   # NoItemAndPropertyList: 각 프로젝트 빌드 시작 시 diagnostic의 자세한 정도로 표시되는 항목 및 속성 목록을 숨깁니다.
rem  ## /noconsolelogger(=/noconlog)    - 콘솔 로그 비활성화

rem ### File Log
rem  ## /l:FileLogger,Microsoft.Build.Engine;logfile=MyLog.log
rem  ##    (append=true;verbosity=diagnostic;encoding=utf-8)

if /i %1 == "Visit" (
msbuild /nologo /noconlog /t:Build /p:DCC_Define=__PRODUCT_VISIT__ /p:Configuration=%2 %3
) Else (
msbuild /nologo /noconlog /t:Build /p:Configuration=%2 %3
)

rem msbuild로 빌드하면 eureka 디버그 환경이 포함되지 않는다.
rem 그래서 아래와 같은 작업을 추가 해준다.
rem 이런 문제조차 있는지 모르다가 테스트중 알게되서 수정하는데.. 겁내 삽질함..ㅅㅂ
rem 일단 설정을 두가지로 빼놨는데,
rem 하나는 예외/오류 메시지 팝업버전이고 다른건 팝업안되게 하는거.
rem "el_config" 요 옵션을 사용하지 않으면 기본설정으로 적용된다.10_0707 11:49:05 sunk
rem ecc32 --el_config"eureka_exception_dlg.eof" --el_alter_exe%3

ecc32 --el_config"eureka_none_exception_dlg.eof" --el_alter_exe%3;%4

if %ERRORLEVEL% EQU 0 (
 echo [%DATE% %TIME%] %5 빌드 성공~
 goto Contunue_Build
) ELSE (
 echo [%DATE% %TIME%] %5 빌드 실패!! 코드 확인바람~ (ERRORLEVEL = %ERRORLEVEL%)
 goto Error_Build
)

:Error_Build

@COLOR 1C
echo 시작 시간 = %SDT%
echo 종료 시간 = %DATE% %TIME%
echo.

echo 대상경로 : %3
echo.

echo 빌드 에러!!!!!!!!!!!!
echo.

rem 에러나면 여기서 빌드 종료.
@pause
@exit;

:Contunue_Build
rem 다음작업 계속 처리.
echo.

2010/07/07 13:30 2010/07/07 13:30