gen_vcproj.py (Source File List -> .vcproj File VC7.1)
* 도입
다양한 Open Source의 덕택으로 처음부터 고생하면서 프로그래밍할 필요가 줄어들었지만 여전히 OS 또는 Compiler간의 Porting을 피할 수 없는 경우가 종종 있다.
수작업으로 VC Project를 만드는 일 만큼 지겨운 일도 드물다.
gen_vcproj.py는 Source File List로 VC7.1의 vcproj File을 생성한다.
vcproj File은 Static Library (Debug/Release), Dynamic Library (Debug/Release) 4가지의 Configuration을 제공한다.
gen_vcproj.py의 사용법, Dll Def File 생성법에 대해서 설명한다.
* Prerequisite
Windows 2K이상 (아마도 IE 4.0 이상), VC7.1 IDE(2003)이상
Python2.4 (2.3에서도 문제 없을듯) : http://www.python.org/
Win32All : http://starship.python.net/crew/mhammond/win32/
- PyXMLDom을 사용하려고 했으나 Attribute의 출력 순서가 입력 순서하고 달라서 IE의 XML DOM Library를 사용함, 어차피 vcproj는 윈도우즈용이므로.
grep, sed : cygwin이나 msys나 gnuwin32
* VCPROJ File 생성
원래 의도는 dir /b *.c | gen_vcproj.py PROJECT_NAME 이었으나
동작 안함.
dir /b *.c | python SCRIPT_PATH\gen_vcproj.py PROJECT_NAME
PROJECT_NAME.vcproj를 열어서 Static Library가 Build되도록
적당히 손 본다. (README, Makefile 또는 Source Code상의 Comment 확인)
OS 의존적 코드가 있을 경우에는 고생 좀 해야 한다.
* Def File 생성
Dll Export 함수를 지정하는 방법중 대표적인 방법은
__declspec(dllexport)를 써넣는 것이지만 Source Code에서 그것을 기대할 수 없다. (jpeg6b처럼 External 함수를 Macro로 지정해서 쉽게 지정할 수 있는 경우도 있다) 그렇다고 해서 일일이 External 함수 선언에 __declspec(dllexport)를 붙이고 앉아 있는 것은 프로그래머로서의 자존심이 허락하지 않는다.
Static Library (.lib)를 Build하는 것이 성공했다면, 일이 쉬워진다.
Static Library File의 Symbol에서 External 함수를 추출해서 .def File을 만들면 된다.
dumpbin /SYMBOLS LIB.lib | grep 'SECT[0-9]\+.*().*External.*| _' | sed -e 's,.*| _\(.*\),\t\1 > LIB.def
type LIB.def하면
vsnprintfN
snprintfN
asprintfN
...
맨 윗줄에 EXPORTS를 추가한다.
EXPORTS
vsnprintfN
snprintfN
asprintfN
...
만들어 낸 .def File을 Dll (Debug/Release) Project Setting에 추가한다.
* 결론/토론
1. .def File 생성은 C++ 라이브러리에서 동작하지 않을 지도 모른다.
2. XML의 Attribute 순서 의존은 타당한가?
3. (GUI등을 제외한 일반) Library의 OS 의존은 정당한가?
첨부 | 파일 크기 |
---|---|
gen_vcproj.py_.txt | 6.79 KB |
댓글 달기