Windows環境でオプションを解析する
getoptは、主としてUNIX系のOSで使われるオプション解析のための機能です。従って、世にあるgetoptを利用したプログラムの多くは、PC-UNIX系OSの上でビルドすることを前提に書かれています。しかし、Windows上でもgetoptが使えたら大変便利ですし、プログラムの移植性向上にも一役買ってくれそうです。
なんとか、Windows上でgetoptを使う手立てはないものでしょうか? 実は、いくつか解決策が存在します。本稿では、いくつかある方法の中でも
- BSDライセンスで配布されている
getoptを利用する方法 - GNU getoptのWindows向け実装を利用する方法
の2つを取り上げ、Windows上でgetoptを利用する方法について紹介します(※注3)。なお、本文中に掲載したプログラムの動作確認には、Free Getoptを使用しました。
このほか、パブリックドメインで提供されているgetoptを使う方法などがあります。
BSDライセンスで配布されているgetoptを利用する方法
Free GetoptというBSDライセンスで提供されているgetoptを利用することでもWindows上でgetoptを活用することができます。
このライブラリの目標は、GNU getopt互換のBSDライセンスで提供されるgetoptを作り出すことです(さらに、Windowsで使われる「/」を使ったオプションの指定にも対応したいとのことです)。
柔軟なBSDライセンスで提供されているライブラリであるため、様々な用途に使えるのが強みです。長らく更新が止まっていることがネックですが、BSDライセンスで提供されている貴重なライブラリとして大変有用です。
GNU getoptのWindows向け実装を利用する方法
Linuxやその他のフリーなPC-UNIX系OSで標準的に使われているGNU getoptをWindows向けにポーティングしたタイプのライブラリです。代表的なものに下記ウェブサイトで配布されているようなものが挙げられます。
唯一問題となるのは、GPLによるソースコード開示義務でしょう。この問題さえクリアできれば、使いやすいライブラリだと言えます。
いずれもincludeするべきヘッダーファイルがunistd.hではないので、その点に注意して必要なファイルと共にコンパイルすれば、getoptを利用したプログラムをWindows環境でビルドし、実行することが可能です。
まとめ
今回ここで紹介した伝統的なgetopt関数以外にも、長いオプションを解析するためのGNUによる拡張としてgetopt_longとgetopt_long_onlyがあります。
これら2つの関数については、マニュアルページに詳細なサンプルコードが掲載されており、参考資料に挙げたGNUのサイトでもよく解説されているので、そちらを参照しながらプログラムを組むと良いでしょう。その時にも、本稿で紹介したgetoptの知識を生かしていただければ幸いです。
参考資料
本稿を執筆するにあたって、下記の資料を参考にしました。
