kitgenが正式にサポートしているのはVC6からVC8(2005)までです。
VS2008~VS2013についても、いくつか変更を加えてやればビルドできます。
ただ、これはTclに限ったことではないのですが、VS2012で普通にビルドした実行ファイルはXPで動作しません。SDK 7.1Aにリンクすればビルドできますが、VS2010以前を持ってる人にとっては面倒なだけでメリットがないので古いVSを使った方がいいです。(参考ページ)。
あと、これはいいのかどうか分かりませんが、VC6でビルドするとOS標準添付のC++ランタイム(msvcrt.dll)をリンクするので、別途ランタイムをインストールすることなく動作します。MinGWでビルドした場合もそうなるのでまあ問題ないんじゃないでしょうか。
kitgen/Makefile.vc
70c70 < CFLAGS = -W3 -D_WINDOWS -DWIN32 -DSTATIC_BUILD --- > CFLAGS = -W3 -D_WINDOWS -DWIN32 -DSTATIC_BUILD -D_CRT_SECURE_NO_WARNINGS 142c142,148 < !if $(VCVERSION) >= 1500 --- > !if $(VCVERSION) >= 1800 > VCVER=12 > !elseif $(VCVERSION) >= 1700 > VCVER=11 > !elseif $(VCVERSION) >= 1600 > VCVER=10 > !elseif $(VCVERSION) >= 1500 |
kitgen/8.x/mk/tcl/mk4tcl.cpp
2597c2597 < EXTERN int Mk4tcl_Init(Tcl_Interp *interp) { --- > int Mk4tcl_Init(Tcl_Interp *interp) { 2601c2601 < EXTERN int Mk_Init(Tcl_Interp *interp) { --- > int Mk_Init(Tcl_Interp *interp) { 2605c2605 < EXTERN int Mk4tcl_SafeInit(Tcl_Interp *interp) { --- > int Mk4tcl_SafeInit(Tcl_Interp *interp) { 2609c2609 < EXTERN int Mk_SafeInit(Tcl_Interp *interp) { --- > int Mk_SafeInit(Tcl_Interp *interp) { |
kitgen/8.x/mk/tcl/mk4tcl.h
382a383,391 > > > EXTERN int Mk4tcl_Init(Tcl_Interp *interp); > > EXTERN int Mk_Init(Tcl_Interp *interp); > > EXTERN int Mk4tcl_SafeInit(Tcl_Interp *interp); > > EXTERN int Mk_SafeInit(Tcl_Interp *interp); |
kitgen/8.x/itcl/win/rules.vc
195c195,201 < !if $(VCVERSION) >= 1500 --- > !if $(VCVERSION) >= 1800 > VCVER=12 > !elseif $(VCVERSION) >= 1700 > VCVER=11 > !elseif $(VCVERSION) >= 1600 > VCVER=10 > !elseif $(VCVERSION) >= 1500 |
kitgen/8.x/mk/win/rules.vc
187c187,195 < !if $(VCVERSION) >= 1400 --- > !if $(VCVERSION) >= 1800 > VCVER=12 > !elseif $(VCVERSION) >= 1700 > VCVER=11 > !elseif $(VCVERSION) >= 1600 > VCVER=10 > !elseif $(VCVERSION) >= 1500 > VCVER=9 > !elseif $(VCVERSION) >= 1400 189,190d196 < _VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1 < _VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2 195a202,205 > !if $(VCVERSION) >= 1400 > _VC_MANIFEST_EMBED_EXE=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1 > _VC_MANIFEST_EMBED_DLL=if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2 > !endif |
kitgen/8.x/thread/win/rules.vc
195c195,201 < !if $(VCVERSION) >= 1500 --- > !if $(VCVERSION) >= 1800 > VCVER=12 > !elseif $(VCVERSION) >= 1700 > VCVER=11 > !elseif $(VCVERSION) >= 1600 > VCVER=10 > !elseif $(VCVERSION) >= 1500 |
kitgen/8.x/vqtcl/win/rules.vc
195c195,201 < !if $(VCVERSION) >= 1500 --- > !if $(VCVERSION) >= 1800 > VCVER=12 > !elseif $(VCVERSION) >= 1700 > VCVER=11 > !elseif $(VCVERSION) >= 1600 > VCVER=10 > !elseif $(VCVERSION) >= 1500 |
8.6.1をビルドするには、kitgen、Tcl、Tkのソースをダウンロードして、
以下にコピーします。
C:\src\kitgen C:\src\kitgen\8.6.1\tcl C:\src\kitgen\8.6.1\tk
Visual Studioのコマンドプロンプトを開き、
mkdir C:\src\kitgen\8.6.1\kit-msvc cd C:\src\kitgen\8.6.1\kit-msvc echo all: lite heavy > Makefile echo !include ..\..\Makefile.vc >> Makefile nmake -f Makefile.vc -nologo VERSION=86 KITOPTS=”-t -z”
ちなみに、tdbc関連のモジュールが大量にビルド失敗しますが、使わない限りは問題ありませんでした。