[Mac M2 Pro 12CPU, Sonoma 14.5, wxWidgets 3.2.5]
wxWidgetsのHomebrewでの最新バージョンが3.2.3と遅れているのでGitHub最新の3.2.5を自分でビルドしました。zipではビルドできません。tar.bz2をダウンロードします。
# --with-libtiff=builtinを追加しないとエラーになる
mkdir build-cocoa-debug
cd build-cocoa-debug
../configure --enable-debug --with-libtiff=builtin
make
ビルドしたライブラリとインクルードは/usr/localにコピーしました。アプリのビルド時にwx/setup.hがないというエラーになりましたが、以下のパスにあったのでインクルードフォルダにコピーしました。
/wxWidgets-3.2.5/build-cocoa-debug/lib/wx/include/osx_cocoa-unicode-3.2/wx/setup.h
wxWidgetsを広く普及するためにも、せめてHomebrewに最新版を登録して欲しいところですが、人が足りないのかな。
Makefileは以下の通りです。
# コンパイラ
COMPILER = clang++
DEBUG = -g
# フラグ
CPPFLAGS = -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL -D__WXMAC__ -D__WXOSX__ -D__WXOSX_COCOA__ -std=c++17
LDFLAGS = -framework IOKit -framework Carbon -framework Cocoa -framework QuartzCore -framework AudioToolbox -framework System -framework OpenGL -lwx_osx_cocoau_xrc-3.2 -lwx_osx_cocoau_html-3.2 -lwx_osx_cocoau_qa-3.2 -lwx_osx_cocoau_core-3.2 -lwx_baseu_xml-3.2 -lwx_baseu_net-3.2 -lwx_baseu-3.2 -lc++
# includeパス(-I)
INCLUDE = -I./include -I/Volumes/DATA_m1/code/cpp/mylib/include -I/usr/local/include/wxWidgets
# ライブラリ(-l)
LIBRARY0 =
# ライブラリパス(-L)
LIBRARY = -L/usr/local/lib/wxWidgets
# ソースファイル
SRCDIR = ./src
SRCS = $(shell find $(SRCDIR) -type f)
# オブジェクトファイル
OBJDIR = ./obj
OBJS = $(addprefix $(OBJDIR), $(patsubst ./src/%.cpp,/%.o,$(SRCS)))
# 実行ファイル
TARGETDIR = ./bin
TARGET = SwitchBotManager
# cppファイルからoファイル作成 $<:依存ファイル
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
$(COMPILER) $(CPPFLAGS) $(INCLUDE) $(DEBUG) -o $@ -c $<
# oファイルから実行ファイルとappファイル作成
$(TARGET): $(OBJS)
$(COMPILER) -o $(TARGETDIR)/$@ $(OBJS) $(LIBRARY0) $(LDFLAGS) $(LIBRARY)
mkdir -p $(TARGET).app/Contents/MacOS
mkdir -p $(TARGET).app/Contents/Resources
cp $(TARGETDIR)/$(TARGET) $(TARGET).app/Contents/MacOS/$(TARGET)
cp ./images/$(TARGET).icns $(TARGET).app/Contents/Resources
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > $(TARGET).app/Contents/Info.plist
echo "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">" >> $(TARGET).app/Contents/Info.plist
echo "<plist version=\"1.0\">" >> $(TARGET).app/Contents/Info.plist
echo "<dict>" >> $(TARGET).app/Contents/Info.plist
echo " <key>CFBundleExecutable</key>" >> $(TARGET).app/Contents/Info.plist
echo " <string>$(TARGET)</string>" >> $(TARGET).app/Contents/Info.plist
echo " <key>CFBundleIconFile</key>" >> $(TARGET).app/Contents/Info.plist
echo " <string>$(TARGET).icns</string>" >> $(TARGET).app/Contents/Info.plist
echo " <key>CFBundleIdentifier</key>" >> $(TARGET).app/Contents/Info.plist
echo " <string>com.yourcompany.$(TARGET)</string>" >> $(TARGET).app/Contents/Info.plist
echo " <key>CFBundleName</key>" >> $(TARGET).app/Contents/Info.plist
echo " <string>$(TARGET)</string>" >> $(TARGET).app/Contents/Info.plist
echo " <key>CFBundleVersion</key>" >> $(TARGET).app/Contents/Info.plist
echo " <string>1.0</string>" >> $(TARGET).app/Contents/Info.plist
echo "</dict>" >> $(TARGET).app/Contents/Info.plist
echo "</plist>" >> $(TARGET).app/Contents/Info.plist
# 全ソース強制コンパイル
.PHONY:all
all: clean $(TARGET)
# 全ファイル削除
.PHONY:clean
clean:
rm -rf $(OBJS) $(TARGETDIR)/$(TARGET) $(TARGET).app