SCons - Working with Windows

SCons - Working with Windows


이번 글에서는 Windows에서 SCons와 MSVC를 사용한 컴파일을 해보도록 하겠습니다.


1. 설치 및 설정

우선 Windows에는 기본적으로 Python이 설치되어있지 않습니다. 당연히. 짜증나게도.
그래서 가장 먼저 해줄 일은 Python을 설치하는 것인데, 설치 파일을 그대로 실행하면
친절히 알아서 모든 작업을 다 해줍니다.
하지만 당연히 되어야 할 부분 같은데, 제가 설치할 시에는 Python의 bin폴더가 PATH에 등록되지 않아
cmd상에서 python이라고 치면 실행되지 않습니다. 이건 간단히 시스템 속성에서 환경 변수 PATH에
python의 설치 디렉토리를 추가해주면 되겠습니다.
그리고 SCons를 받아 설치하게 되면 이 역시 설치 자체는 매우 간단하나, PATH가 잡혀있지 않으므로
SCons가 설치되는 C:\Python 디렉토리\Scripts를 역시 PATH 변수에 추가해줍니다.
그리고 마지막으로 cmd를 띄워서 scons -v라고 입력해봅니다. 제대로 버전이 뜨면 성공입니다!


2. Windows에서 컴파일하기

Windows에서 간단하게 SConstruct를 다음과 같이 입력하고 실행시키면
env Environment()
env.Program('test', 'test.cpp')
다음과 같은 에러 메시지가 뜨게 됩니다.
LINK : fatal error LNK1104: cannot open file 'kernel32.lib'
scons: *** [main.exe] Error 1104
scons: building terminated because of errors.
아... 짜증나죠.
분명히 Visual Studio command prompt로 실행하여 환경 변수를 설정해주었음에도 불구하고,
이런 기초적인 문제가 발생하는 이유는 환경 변수만 설정 되었을 뿐, 이러한 사항들을 SCons에서
전혀 인지하고 있지 못하기 때문입니다 (하여간 Windows만 오면 문제가 복잡해짐-.-).
Visual Studio 역시 옵션을 열어보면 기본 포함/라이브러리/실행 디렉토리에 각종 환경변수들이
자리잡고 있으며, 사용자가 지정해주지 않아도 프로젝트 링커 속성에서 명령줄을 살펴보면
다양한 기초 라이브러리들이 기본적으로 링킹되고 있음을 볼 수 있습니다.
이를 해결하기 위해서는 SConstruct를 아래와 같이 작성합니다.
import os

env = Environment()

env['ENV']['PATH'] = os.environ['PATH']
env['ENV']['INCLUDE'] = os.environ['INCLUDE']
env['ENV']['LIB'] = os.environ['LIB']
env['ENV']['LIBPATH'] = os.environ['LIBPATH']
env['ENV']['WindowsSdkDir'] = os.environ['WindowsSdkDir']
env['ENV']['VCINSTALLDIR'] = os.environ['VCINSTALLDIR']

env.Program('test', 'test.cpp')
os는 매우 유용한 자료를 많이 담고 있는데, 위에서 보듯이 environ을 통해 현재 플랫폼의 다양한
환경 변수들을 가져올 수 있습니다. SCons가 MSVC에 적절한 환경 변수를 전달해주기 위해서는
위와 같은 os.environ의 정보들을 사용자가 직접 넣어주어야 합니다.
이렇게 입력한 다음 scons를 실행시키면
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
link /nologo /OUT:main.exe main.obj
scons: done building targets.
아름답게 컴파일이 이루어집니다.

Posted by

2009/08/13 23:27 2009/08/13 23:27
Response
0 Trackbacks , 0 Comments
RSS :
http://doyub.com/blog/rss/response/782

Trackback URL : http://doyub.com/blog/trackback/782

« Previous : 1 : ... 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : ... 33 : Next »