좋은글

DOS 창에서 compile 결과 파일 저장 방법

아르비스 2008. 4. 2. 03:48
Unix나 DOS에 익숙하신 분들이거나 makefile을 많이 만드는 F/W 담당자들이라면 알고 있는 내용이지만 요즘
compile batch파일에 적용되어 있지 않고 내용이 공유되지 않는 것 같아서 올립니다.

Compile 결과를 파일로 저장하여 Error나 Warning에 대한 분석을 용이하게 해주기 위한 방법 중의 하나입니다.

1. 필요 이유 : Source Insight와 같은 Tool에서 compile하지 않고 DOS창에서 직접 compile할 경우 그 결과를
한번에 보기 힘듬. 특히 빠르게 지나가는 Warning에 대한 정보를 보지못할 가능성이 높음.

2. 일반적인 파일 저장 방법 및 그 단점
  1) c:\>make makefile.mak > build.log
  와 같은 형식을 사용하면 compile 결과가 build.log 파일에 저장됨. 그러나 이 경우 DOS 화면에 결과가 보여지
지 않으며 compiler에 따라서 compile error/warning 결과에 대해서 build.log에 저장되지 않는 경우가 많음.

  2) c:\>make makefile.mak | tee build.log
  형식은 UNIX의 tee.exe를 이용하여 build.log에 저장하는 것으로 DOS 화면에도 결과가 보여지고 build.log에
도 결과가 저장되어 위 1)번 방법보다 좋은 방법임. 그러나 위 1)번과 같이 compiler에 따라서 compile
error/warning 결과가 build.log에 저장되지 않는 경우가 많음(tee.exe의 경우 Cygwin에 포함되어 있기 때문
에 Cygwin이 설치되어 있으면 사용 가능함).

3. 위 2번 문제의 원인 및 해결 책
  1) 위 2번에서 build.log에 compile error/warning이 저장되지 않는 이유는 compiler에 따라서 error/warning
결과를 stdout이 아닌 stderr로 출력하는 경우가 있기 때문임. DOS창에서는 stdout이든 stderr이든 모두
consol, 즉 Window환경에서는 DOS창에 표시해주지만 tee.exe나 '>' 들은 stdout에 대하여 결과를 보여주기
때문에 저장되지 않는 부분이 발생하게 됨.
  2) 해결 방법은 stderr를 stdout으로 redirect 시키면 됨. 방법은 '2>&1'이며 여기서 2는 stderr를 1은 stdout을
나타내는 장치를 나타내는 고유번호임.

    즉, c:\>make makefile.mak 2>&1 | tee build.log

를 사용해주면 됨. 보통 comile할 때 batch파일을 많이 이용해주는데 만일 compile을 위한 batch파일이 m.bat
이고 m.bat과 함께 사용가능한 compile 모델을 지시하는 변수가 MODEL이라면 역시
     c:\>m MODEL 2>&1 | tee build.log
같은 형식으로 사용하면 됨.