[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

8. getopt_longが利用できない場合どうするの?

コマンドライン引数を構文解析するCの関数を生成するためgengetoptを使用し ている場合,これらの生成された関数が,実際にコマンドラインを読み込み, それを構文解析するために,getopt_longを使用していることを知って おく必要があります.この関数は,通常標準Cライブラリの一部ですが,実装に よっては含まれていない可能性があります.しかし,これは問題にはなりませ ん.我々は,getopt_long関数を実際に実装しているCのファイルを提供してい ます.`getopt.c',`getopt1.c'そして`gnugetopt.h'です.こ れらのファイルは,`<install prefix>/share/gengetopt'ディレクトリで 見つかり,`<install prefix>'はコンパイル時に指定したものになります. プレフィクスを指定しなかった場合は`/usr/local'がデフォルトです.バ イナリ形式のgengetoptをダウンロードした場合,プレフィクスは `/usr/local'または`/usr'になります.

`gnugetopt.h'を`getopt.h'に名前を変更し,これらのファイルをコ ンパイルし,プログラムの実行形式にリンクすることが可能です.しかし, automakeとautoconfを使用している場合,より簡潔な解決方法があります.以 下のURLからマクロをダウンロードしてください.

http://www.gnu.org/software/ac-archive/m4source/adl_func_getopt_long.m4

そして,`acinclude.m4'にそれを追加して下さい.このマクロは, gengetoptのソースの`acinclude.m4'にもあります.

このマクロはgetopt_long関数がCライブラリかどうかを調査し,そうでない場 合は`getopt.o'と`getopt1.o'を実行形式にリンクするオブジェクト ファイルに追加します(LIBOBJS).

そして,ソースディレクトリの`Makefile.am'で,LIBOBJSの内容 に,getopt_longを使用する必要があるプログラムのLDADDを追加する必 要があります.例えば,プログラム`foo'がgetopt_longを使用する必要が ある場合,以下の行を追加する必要があります.

 
foo_LDADD = @LIBOBJS@

さて,これらのファイルはコンパイルされ,必要がある場合だけプログラムに リンクされます.

更に,`getopt.c',`getopt1.c',そして`gnugetopt.h'を配布 物に追加する必要があります.これらのファイル名をfoo_SOURCESの中 身に書く必要はありませんが,`gnugetopt.h'はEXTRA_DISTに追加 する必要があります.

 
EXTRA_DIST = gnugetopt.h

gengetoptの`configure.in'と`src/Makefile.am'を見てみると良い でしょう.それらは両方とも,ここで記述しているテクニックを使用していま す.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on November, 2 2005 using texi2html 1.70.