[C++] 02 FLTKのMakefile修正(appファイル作成)

[M1 Mac, Big Sur 11.6.1, FLTK 1.3.8]

昨日の段階ではmakeコマンドで実行ファイルを作成できませんでしたが、少し知識を仕入れたので更にその先のappファイルを一発作成できるようMakefileを修正しました。

Mac用であるappファイルはこのように簡単に作れます。ただWindowsストア用appxファイルはどうやったら作成できるのか。かなり難航しそうな予感がします。

Makefileの記述はぱっと見、取っつきにくいですが、そのうち慣れるでしょう。

CXX = $(shell fltk-config --cxx)
DEBUG = -g
CXXFLAGS = $(shell fltk-config --use-gl --use-images --cxxflags ) -I.
LDFLAGS = $(shell fltk-config --use-gl --use-images --ldflags ) -lc++ -L/opt/homebrew/Cellar/jpeg/9e/lib -L/opt/homebrew/Cellar/libpng/1.6.37/lib
LINK = $(CXX)
TARGET = test
OBJS = test.o
SRCS = test.cpp
.SUFFIXES: .o .cxx

# appファイル作成関連
STRIP      = strip
POSTBUILD  = fltk-config --post

# コマンド構成
%.o: %.cxx
	$(CXX) $(CXXFLAGS) $(DEBUG) -c $<
$(TARGET): $(OBJS)
	$(LINK) -o $(TARGET) $(OBJS) $(LDFLAGS)
	$(STRIP) $@
	$(POSTBUILD) $@

clean: $(TARGET) $(OBJS)
	rm -f *.o 2> /dev/null
	rm -f $(TARGET) 2> /dev/null

参考サイト:Article #599: Beginners Guide to fltk-config

[C++] 01 FLTKのMakefile作成

[M1 Mac, Big Sur 11.6.1, FLTK 1.3.8]

GUI作成ツールのFLTKをいじり始めました。今のところ非IDE環境です。

まずはHello WorldのMakefileをFLTKマニュアル(全1123ページの長編)を参考に作成しましたが、実行時エラーが発生しました。後で見ると–use-glや–use-imagesなど余計なオプションがあるものの、そのまま進めています。

試行錯誤の末、makeコマンド一発での実行ファイル作成をあきらめ、生成されたコマンドのオプションを修正し2つのコマンドで実行ファイルを作成しました。オプションに”-lc++”を追加することで”clang: error: linker command failed with exit code 1″の沼から脱しました。プログラミング強者が集うStack Overflow英語版のおかげです。なおこのオプション追加はIntel Macでも必要です。

Python, Javaと学んできてついに本丸のC++に到達しました。挫折しないようのんびり進めていきます。

CXX = $(shell fltk-config --cxx)
DEBUG =-g
CXXFLAGS = $(shell fltk-config --use-gl --use-images --cxxflags ) -I.
LDFLAGS = $(shell fltk-config --use-gl --use-images --ldflags )
LDSTATIC = $(shell fltk-config --use-gl --use-images --ldstaticflags )
LINK = $(CXX)
TARGET = test
OBJS = test.o
SRCS = test.cpp
.SUFFIXES: .o .cxx
%.o: %.cxx
	$(CXX) $(CXXFLAGS) $(DEBUG) -c $<
all: $(TARGET)
	$(LINK) -o $(TARGET) $(OBJS) $(LDFLAGS)
$(TARGET): $(OBJS)
test.o: test.cpp
clean: $(TARGET) $(OBJS)
	rm -f *.o 2> /dev/null
	rm -f $(TARGET) 2> /dev/null
# makeで作成したコンパイルとビルドのコマンド
# 後者から-lpngと-ljpegを削除して-lc++を追加(Intel Macでは削除不要)

clang++ -I/opt/homebrew/Cellar/fltk/1.3.8/include -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -I. -c -o test.o test.cpp && \
cc -L/opt/homebrew/Cellar/fltk/1.3.8/lib -lc++ -lfltk_images -lz -lfltk_gl -framework OpenGL -lfltk -lpthread -framework Cocoa test.o -o test

# -lpngと-ljpegを削除しない場合は以下のコマンド(-Lオプション2つと-lc++追加)
clang++ -I/opt/homebrew/Cellar/fltk/1.3.8/include -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -I.   -c -o test.o test.cpp && \
cc -L/opt/homebrew/Cellar/fltk/1.3.8/lib -L/opt/homebrew/Cellar/jpeg/9e/lib -L/opt/homebrew/Cellar/libpng/1.6.37/lib -lc++ -ljpeg -lpng -lfltk_images -lz -lfltk_gl -framework OpenGL -lfltk -lpthread -framework Cocoa  test.o   -o test

ウィジェット・ツールキットの検討

JavaのSwingでGUIアプリを作成する際、既存のLook and Feelを混在させるとその制約を受けて自由度が低くなるケースが多々あるため、言語にとらわれず新たなウィジェット・ツールキットを検討しています。

C++であればFLTKあたりが比較的容易に導入できそうなので、勉強を兼ねてSwingで開発中のアプリを移植できるか試しにいじってみることにしました。そこそこの外観で処理速度アップが目標です。

Swingの使いこなしの方もまだまだですし、並行してスキルアップに努めます。SynthLookAndFeelを使えばデフォルトのLook and Feelを無効化できるので、アプリの処理速度にこだわらなければこれで好きなように描画可能です。

[Java]103 Look and Feelの外観

これまで様々なLook and Feelを扱ってきましたが、Swingで作ったアプリの外観は美的観点から問題があるように思います。

デフォルトであるクロスプラットフォームL&FのMetalは青色が幅を利かせています。WindowsのTabbedPaneはbackgroundが薄い青色で塗りつぶされて見栄えは最悪です。

これを避けるためにコードの頭でUIManager.setLookAndFeelにてL&FをシステムL&Fに変更してみました。しかしWindowsのシステムL&Fも今ひとつです。特にJSliderのつまみは何故か透明で見れたもんじゃないです。加えてJButtonのマージンは横方向が無駄に大きく、フォントサイズをかなり小さくしないと”…”と表示されてしまいます。ここまで酷いとJavaでWindowsアプリを作る気にはならないでしょう。

MacのシステムL&FであるAquaは私の使う範囲ではJButtonのデザイン以外特に問題ないのですが、Windowsの場合はMetalもシステムL&Fもダメなので、結局JComponentを継承したクラスを必要なComponentに応じて自製しそれぞれ描画させています。

Swingの機能自体は素晴らしいというのに、肝心の見た目が悪ければプログラマとユーザーは離れてしまいます。新たなGUIライブラリの出現に期待したいところです。