libiconv

libiconvメイク時の覚え書き.

開発環境
Visual C++ 6.0 SP6(Visual C++ .NET 2003 でも確認した).
ダウンロードしたアーカイブ
libiconv-1.9.1.tar.gz.
gettext-0.14.tar.gz.

iconv.lib をメイクするには,libintl.h が必要となる.またアプリケーションによっては, intl.lib が必要となるかもしれない*1
libintl.h, intl.lib は gettext-0.14.tar.gz に同梱されたソースコードを使ってメイクする*2
下の例ではメイクファイルのDEBUG版用マクロを定義し,かつ,cl.exeのコマンドラインオプションとして -MLd がわたされるように設定し,シングルスレッド,デバッグ版のライブラリを作っている.

SET INSTALL_DIR=c:\usr\local
nmake -f Makefile.msvc DEBUG=1 MFLAGS=-MLd DLL=0 PREFIX=%INSTALL_DIR%
nmake -f Makefile.msvc DEBUG=1 MFLAGS=-MLd DLL=0 PREFIX=%INSTALL_DIR% install



3)libiconv-1.9.1\lib\Makefile.msvc を使って,iconv.lib をメイクする.
libiconv-1.9.1\Makefile.msvc を使うと,libiconv-1.9.1\Makefile.msvc から他のメイクファイルを処理する際にMFLAGSの設定がきちんと渡されないのか,生成されるコードがおかしくなる.MFLAGSの設定として想定されている -ML,-MT,-MD 以外を渡しているから上手く動かないのかもしれないが,あまり細かいことまで調べていないので,はっきりとした理由はわからない.
libiconv-1.9.1\Makefile.msvc を使っていないので,installでコピーされるのはiconv.lib だけである.iconv.h は自分で libiconv-1.9.1\include 内のファイルでふさわしいものをコピーする.
下の例では静的ライブラリを作成しているので,iconv.h.msvc-staticをiconv.hという名前でコピーしている.

SET INSTALL_DIR=c:\usr\local
nmake -f Makefile.msvc DEBUG=1 MFLAGS=-MLd DLL=0 PREFIX=%INSTALL_DIR%
nmake -f Makefile.msvc DEBUG=1 MFLAGS=-MLd DLL=0 PREFIX=%INSTALL_DIR% install
copy ..\include\iconv.h.msvc-static %INSTALL_DIR=c%\include

(追記:2004/12/18)
gettext-win32, libiconv-win32 プロジェクト.
SourceForge.net: Project Info - gettext for Win32
なんていうのもありました.(試してはいません)

*1:あまりきちんと調べていない.

*2:他のアーカイブにも同梱されているかも知れないが,ここでは gettext を使う.).なお,libintl.h, intl.lib を作る際に iconv.h が読み込まれるので,パスを通しておく.
1)libiconv-1.9.1.tar.gz,gettext-0.14.tar.gz を展開する.
2)gettext-0.14\gettext-runtime\intl\Makefile.msvc を使って,libintl.h,intl.lib をメイクする.iconv.h へのパスを通すことを忘れないようにする. バッチファイルで次のコマンドを実行した((実際には,installを指定した下の行だけで構わない.