次: Bugs, 前: Multiple Options, 上: Top
コマンドライン引数を構文解析する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を見てみると良い でしょう.それらは両方とも,ここで記述しているテクニックを使用していま す.