結局、C++なんでargc、argvなんかを直接見てもいいんだろうが、Qtでは、コマンドライン引数のオプションを解析してくれるクラスがあるんでそれを使ってみる。
試しに作ってみたソースをあげておく。説明はソース中のコメントで行っているので参照してくれ。
main.cpp
#include <QCoreApplication>
#include <QCommandLineParser>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// アプリの名前やバージョンを設定(--versionで表示される)
QCoreApplication::setApplicationName("Test Command Line");
QCoreApplication::setApplicationVersion("1.0");
// コマンドライン引数を表示する。
qDebug() << "## argmuments";
for(QString arg : QCoreApplication::arguments()) {
qDebug() << arg;
}
qDebug() << "###";
QCommandLineParser parser;
// アプリの説明
parser.setApplicationDescription("Analysis of command line arguments test");
// -h、--help、-?(Windowsのみかな?)でヘルプを表示するように設定
parser.addHelpOption();
// -v、--versionでバージョンを表示するように設定
parser.addVersionOption();
// ヘルプ表示用に引数の説明などを追加
parser.addPositionalArgument("param1", "Parameter 1.");
parser.addPositionalArgument("param2", "Parameter 2.");
// -aオプションを追加
QCommandLineOption optionA("a", // オプション
"Option A." // ヘルプ用オプションの説明
);
parser.addOption(optionA);
// -b、--bbbb(長い名前のオプション)オプションを追加
QCommandLineOption optionB({"b", "bbbb"}, "Option B.");
parser.addOption(optionB);
// -c、--ccccオプション(値を取るオプション)を追加
// -c=value、--cccc=value、-c value、-ccc valueのように指定する
QCommandLineOption optionC({"c", "cccc"}, "Option C.",
"valueName", // 値の名称
"default" // 値のデフォルト値
);
parser.addOption(optionC);
// コマンドライン引数の解析と実行(--helpや--versionは実行される)
parser.process(QCoreApplication::arguments());
// オプション以外の引数を表示する
qDebug() << "## params";
for(QString arg : parser.positionalArguments()) {
qDebug() << arg;
}
// オプションの設定状態を表示
if(parser.isSet(optionA)) {
qDebug() << "-a set";
} else {
qDebug() << "-a unset";
}
if(parser.isSet(optionB)) {
qDebug() << "-b set";
} else {
qDebug() << "-b unset";
}
qDebug() << "-c " << parser.value(optionC);
return 0;
}
addHelpOption、addVersionOptionを設定しているので-h、-vでそれぞれヘルプ、バージョンが表示される。こんな感じに表示される。
-hでヘルプを表示
> CommandLine.exe -h
## argmuments
"CommandLine.exe"
"-h"
###
Usage: CommandLine.exe [options] param1 param2
Analysis of command line arguments test
Options:
-?, -h, --help Displays this help.
-v, --version Displays version information.
-a Option A.
-b, --bbbb Option B.
-c, --cccc <valueName> Option C.
Arguments:
param1 Parameter 1.
param2 Parameter 2.
-vでバージョンを表示
> CommandLine.exe -v
## argmuments
"CommandLine.exe"
"-v"
###
Test Command Line 1.0
次に
> CommandLine.exe -b hoge1 hoge2
を実行すると、次のように表示される。
## argmuments
"CommandLine.exe"
"-b"
"hoge1"
"hoge2"
###
## params
"hoge1"
"hoge2"
## option
-a unset
-b set
-c "default"
コメント