官網文檔為:
http://library.gnome.org/devel/glib/stable/glib-Commandline-option-parser.html
簡單來說,就是定義GOptionEntry結構,這個結構裡麵包含了命令項名字、類型以及簡單介紹
然後建立GOptionContext,把定義的GOptionEntry結構放到GOptionContext中,調用g_option_context_parse就可以將命令選項都解出來
預設情況下,-h和--help可以查看程式的協助,這個協助資訊是使用的GOptionEntry中定義的資訊,還有一些輔助函數用來添加一些其它資訊,或對這些資訊的格式進行設定。
下面是一個簡單的樣本:
static gint repeats = 2;<br />static gint max_size = 8;<br />static gboolean verbose = FALSE;<br />static gboolean beep = FALSE;<br />static gboolean rand = FALSE;<br />static gchar *string;<br />static GOptionEntry entries[] =<br />{<br /> { "repeats", 'r', 0, G_OPTION_ARG_INT, &repeats, "Average over N repetitions", "N" },<br /> { "max-size", 'm', 0, G_OPTION_ARG_INT, &max_size, "Test up to 2^M items", "M" },<br /> { "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, "Be verbose", NULL },<br /> { "beep", 'b', 0, G_OPTION_ARG_NONE, &beep, "Beep when done", NULL },<br /> { "rand", 0, 0, G_OPTION_ARG_NONE, &rand, "Randomize the data", NULL },<br /> { "str_test", 's', 0, G_OPTION_ARG_STRING, &string, "test the stirng", NULL},<br /> { NULL }<br />};<br />int<br />main (int argc, char *argv[])<br />{<br /> GError *error = NULL;<br /> GOptionContext *context;<br /> context = g_option_context_new ("- test tree model performance");<br /> g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);<br /> // g_option_context_add_group (context, gtk_get_option_group (TRUE));<br /> if (!g_option_context_parse (context, &argc, &argv, &error))<br /> {<br /> g_print ("option parsing failed: %s/n", error->message);<br /> exit (1);<br /> }<br /> /* ... */<br />}
GOptionEntry的結構定義為:
typedef struct {<br /> const gchar *long_name; // 完整命令 如:--name<br /> gchar short_name; // 簡寫命令 如:-n<br /> gint flags; // GOptionFlags枚舉的值<br /> GOptionArg arg; // GOptionArg枚舉的值<br /> gpointer arg_data; // 解析出來的資料,所要儲存的位置</p><p> const gchar *description; // 參數描述,--help可以查看到<br /> const gchar *arg_description;<br />} GOptionEntry;
編譯之後,可以這樣執行程式
./a.out -r 10 -b -s test
-b後面不能跟參數,因為這個參數類型為:G_OPTION_ARG_NONE。儲存它的變數是一個bool型的值,當有這個參數的值,這個bool值是TRUE,否則是FALSE。
這樣當執行完g_option_context_parse函數之後,就會發現repeats、beep、string裡面都有值了。這兒要注意的是,string這個參數,在使用完了,需要自己來釋放,否則的話就會有記憶體泄露。
下面這個網址裡面是一些不錯的範例程式碼,比較詳細的說明了這塊的用法
https://dev.mobileread.com/svn/iliados/upstream/glib-2.6.6/tests/option-test.c
原來在glib的原始碼裡面就有詳細用法
glib-2.26.0/glib/tests/option-context.c
https://dev.mobileread.com/svn/iliados/upstream/glib-2.6.6/tests/ 這個下面的一些glib的用法,是2.6.6版本的glib源碼附帶的