wxWidgets (wxMSW) の binary package を使う

何年かぶりに使うことになったので memo を記載します. 環境は MinGW-W64-builds-4.2.0 です.

download

https://www.wxwidgets.org/downloads/ から Latest Stable Release: 3.0.2 -> wxMSW DLLs から下記を download

  • wxMSW-3.0.2_gcc481TDM_ReleaseDLL.7z
  • wxWidgets-3.0.2_headers.7z

当初は wxMSW-3.0.2_gcc471TDM_x64_ReleaseDLL.7z を使ったのですがリンクエラーがでました. (たぶんわたしの設定が足りない気がします)

展開と wx/setup.h

include/wx/setup.h を作ります. 以前使用していた wxMSW の内容を貼り付けました.

/*
 * wx/setup.h
 *
 * This file should not normally be used, except where makefiles
 * have not yet been adjusted to take into account of the new scheme
 * whereby a setup.h is created under the lib directory.
 *
 * Copyright:   (c) Vadim Zeitlin
 * Licence:     wxWindows Licence
 */

#ifdef __WXMSW__
#include "wx/msw/setup.h"
#else
#error Please adjust your include path to pick up the wx/setup.h file under lib first.
#endif

コンパイル

このパッケージには wx-config がないので自分でオプションを(雑に)書きました.

WX = /doko/ka/path
CXXFLAGS = -O2 -std=gnu++11 -I$(WX)/include -Wall -Werror

オプションが雑なのか?? コンパイルが異様に遅いです. wxWidgets のヘッダファイルを全部読んでるのでしょうか??

リンク

コンパイルはいいとしてリンカのオプションが複雑になると思うのですが、 sample などから取ってきて雑に書きました.

WXLIB = $(addprefix -l, \
	wxbase30u wxbase30u_net wxbase30u_xml \
	wxexpat wxjpeg \
	wxmsw30u_adv wxmsw30u_aui wxmsw30u_core wxmsw30u_gl \
	wxmsw30u_html wxmsw30u_media wxmsw30u_propgrid wxmsw30u_ribbon \
	wxmsw30u_richtext wxmsw30u_stc wxmsw30u_webview wxmsw30u_xrc \
	wxpng wxregexu wxscintilla \
	wxtiff wxzlib \
)
WXLIB += -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lwininet

前半は使いそうなライブラリ名を全部列挙, 後半は sample (sample はなぜか wx-config を使ってない)のオプションをはっつけました.

hoge.exe: $(OBJ)
	$(CXX) -L$(WX)/lib/gcc481TDM_dll -o $@ $(OBJ) $(WXLIB) 

リンクはそんなに遅くないです.

配布

やってないのでわかりません.

wxMSW-3.0.2_gcc481TDM_ReleaseDLL.7z のうち必要な物を抽出する方法と MinGW-W64 で作った実行ファイルに必要なライブラリを見つけてから、一般ユーザーに渡すべきでしょう.

その他思ったこと

以前使ったとき以来に C++ を使ったのですが、この言語は考えることが多すぎて大変です. ソース記述量は大した量ではないのですが、 document をみたり、g++ が出す template や overload 関連のエラーメッセージを見るのが大変です. じぶんの設定が悪いとは思いますがコンパイルが遅すぎなのも嫌になってきます.

昨今の iOS/Andoroid が流行ってる事情から言ってこのような PC 向けの GUIC++ で記述する場面は減ったのではとか, そもそも PC 向けの GUI ソフトを native で作る場面自体減ったのではとか考えてしまいました.

言語で C++ を選択するのは、私は性に合わないので様々な回避策を設けて他言語で開発ツールを揃えています. 最近は記述が楽で有名なライブラリとの連携がしやすい言語の選択肢が増えてますし、wxWidgets 自体も python から利用する人が多いようです.

native GUI がいるか、というのは web UI や iOS/Andoroid の UI の需要ばかりなのではと考えています.