wxWidgetsのサンプル集をビルドする

下記の記事で構築した環境であることを前提に解説をする
※異なる環境の場合は適宜読み替えること

https://qiita.com/kmatsumoto630823/items/12dcb03654bc5bcadb87

# wxWidgetsのサンプル集はいいものだ

wxWidgetsにはサンプル集が付属している
どんなwidgetが存在するかを実際に動かしながら探せるのでかなり有用
ソースコードも基本的な使い方を学ぶ上で参考になる
詳細な使い方についてはリファレンスとにらみあうことになるが、どんなwidgetが存在することを知らないことには話が始まらないのでとっかかりとして利用してみてはいかが？

https://docs.wxwidgets.org/3.2/page_samples.html

# サンプル集の場所

場所はここ
"C:\wxWidgets\wxWidgets-3.2.2.1\samples\"

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124801/a9363b3e-4f19-b5e8-4dd7-d2086b69ae7d.png)

様々なwidgetのサンプルが各フォルダに配置されている

# サンプルのビルド

サンプルのビルドはwxWidgetsをビルドしたコマンドと同じでOK
今回は静的ライブラリをビルドしたコマンドを使う
※makafileがいい感じ静的ライブラリをリンクするコマンドを生成してくれる

個別のサンプルフォルダに配置されているmakefileを使って個別にビルドしてもいいが、
"C:\wxWidgets\wxWidgets-3.2.2.1\samples\makefile.gcc"
を使えばまとめてビルドしてくれるので今回はこれを使う

```
cd C:\wxWidgets\wxWidgets-3.2.2.1\samples
mingw32-make SHELL=CMD.exe -f makefile.gcc BUILD=release UNICODE=1 SHARED=0 MONOLITHIC=1
```

さて、順調にコンパイルが進んでいると思いきや"C:/wxWidgets/wxWidgets-3.2.2.1/samples/webview"のところでエラーが出た
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124801/ad85afbe-259a-475e-c39c-90c714c90ea4.png)

まれによく見る、リンカがシンボルを解決できなくて（言葉合ってる?）コンパイルエラーになってるパターンだろうか？
調べてみると「g++」コマンドのオプション「-limm32」位置がまずいらしい（リンクする順番に依存関係があるのを初めて知った）

なので「C:\wxWidgets\wxWidgets-3.2.2.1\samples\webview\makefile.gcc」を修正する

``` makefile.gccのそれっぽい行（修正前）
$(CXX) -o $@ @$@.rsp  $(__DEBUGINFO) $(__THREADSFLAG) -L$(LIBDIRNAME)  -Wl,--subsystem,windows -mwindows $(____CAIRO_LIBDIR_FILENAMES_p) $(LDFLAGS)  $(__WXLIB_WEBVIEW_p)  $(__WXLIB_STC_p) -limm32 $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  -lwxscintilla$(WXDEBUGFLAG) $(__WXLIB_MONO_p) $(__LIB_SCINTILLA_IF_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)   -lwxzlib$(WXDEBUGFLAG) -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG) $(EXTRALIBS_FOR_BASE) $(__CAIRO_LIB_p) -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lversion -lws2_32 -lwininet -loleacc -luxtheme
```

「-limm32」を末尾に移動する

```　makefile.gccのそれっぽい行（修正後）
    $(CXX) -o $@ @$@.rsp  $(__DEBUGINFO) $(__THREADSFLAG) -L$(LIBDIRNAME)  -Wl,--subsystem,windows -mwindows $(____CAIRO_LIBDIR_FILENAMES_p) $(LDFLAGS)  $(__WXLIB_WEBVIEW_p)  $(__WXLIB_STC_p)  $(__WXLIB_CORE_p)  $(__WXLIB_BASE_p)  -lwxscintilla$(WXDEBUGFLAG) $(__WXLIB_MONO_p) $(__LIB_SCINTILLA_IF_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)   -lwxzlib$(WXDEBUGFLAG) -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG) $(EXTRALIBS_FOR_BASE) $(__CAIRO_LIB_p) -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lshlwapi -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lversion -lws2_32 -lwininet -loleacc -luxtheme　-limm32
```

修正後、再度ビルドコマンドを叩く
```
cd C:\wxWidgets\wxWidgets-3.2.2.1\samples
mingw32-make SHELL=CMD.exe -f makefile.gcc BUILD=release UNICODE=1 SHARED=0 MONOLITHIC=1
```

今度はちゃんと最後まで行った

# サンプルプログラムを起動してみる

試しに
"C:\wxWidgets\wxWidgets-3.2.2.1\samples\calendar"
のサンプルを起動してみる

コンパイルが正しく終わっていれば「gcc_mswu」フォルダができているので、その中の「calendar.exe」を起動

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124801/d85dfd0b-98d3-5dd0-f683-37f34e44de55.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124801/dcb629b0-5653-548f-3080-990a9d72baa1.png)

ちゃんと起動できてる

# 参考

https://docs.wxwidgets.org/3.2/page_samples.html