[C++] 198 FLTK : Makefileの改良 将棋エンジン”技巧2″を参考に

[M1 Mac, Big Sur 11.6.8, clang 13.0.0, FLTK 1.3.8, NO IDE]

将棋エンジン”技巧2″のMakefileを参考に改良しました。とりあえずカラーアプリMac版をビルドできるようにしました。

GNU Makeはクセが強くてまだまだ修得したとは言えないレベルですが、大分マシになったと思います。

## General Settings(MacOSのみ)
# フラグ設定
CPPFLAGS = -std=c++17 
LDFLAGS = 

# includeパス(-I)
INCLUDE = -I./include -I/opt/homebrew/Cellar/libpng/1.6.37/include -I/usr/local/include \
-I/Volumes/DATA_m1/code/cpp/mylib/include

# ライブラリパス(-l)
LIBRARY_l = /Volumes/DATA_m1/code/cpp/mylib/lib/Funcs.a \
/Volumes/DATA_m1/code/cpp/mylib/lib/ColorConvert.a \
/Volumes/DATA_m1/code/cpp/mylib/lib/CharExtract.a \
/opt/homebrew/Cellar/fltk/1.3.8/lib/libfltk.a \
/Volumes/DATA_m1/code/cpp/mylib/lib/csvProcessChar.a \
/Volumes/DATA_m1/code/cpp/mylib/lib/Split.a \
/Volumes/DATA_m1/code/cpp/mylib/lib/csvProcessString.a \
/Volumes/DATA_m1/code/cpp/mylib/lib/csvProcessChar.a

# ライブラリパス(-L)
LIBRARY_L = 

## Compiler and Target Specific Settings
# MacOS [make mac]
ifeq ($(TARGET), mac)
	COMPILER = clang++
	CPPFLAGS += 
	LDFLAGS += -lc++ -framework Cocoa -w
endif
# MacOS(開発モード) [make macdev]
ifeq ($(TARGET), macdev)
	COMPILER = clang++
	CPPFLAGS += -g -DDEV
	LDFLAGS += -lc++ -framework Cocoa -w
endif
# Windows [make win]
ifeq ($(TARGET), win)
	COMPILER = g++
	CPPFLAGS += -DWIN32
	LDFLAGS += -static -lstdc++ -lgcc -lole32 -loleaut32 -luuid -lwsock32 -lgdi32 -lcomctl32 -mwindows
	LIBRARY_L += -L"C:\MinGW\mingw64\lib"
	ICON = .\images\icon.res
endif
# Windows(開発モード) [make windev]
ifeq ($(TARGET), windev)
	COMPILER = g++
	CPPFLAGS += -DWIN32 -Og -g
	LDFLAGS += -static -lstdc++ -lgcc -lole32 -loleaut32 -luuid -lwsock32 -lgdi32 -lcomctl32
	LIBRARY_L += -L"C:\MinGW\mingw64\lib"
	ICON = .\images\icon.res
endif

## Default Settings(MacOSのみ)
# ソースファイル
SRCDIR = ./src
SRCS = $(shell find $(SRCDIR) -type f)

# オブジェクトファイル
OBJDIR = ./obj
OBJS = $(addprefix $(OBJDIR), $(patsubst ./src/%.cpp,/%.o,$(SRCS)))

# 実行ファイル
BINDIR = ./bin
APP = ColorSampleJP
APPWIN = ColorSampleJP

# cppファイルからoファイル作成 $<:依存ファイル
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
	$(COMPILER) $(CPPFLAGS) $(INCLUDE) -o $@ -c $<

# アプリファイル作成関連
POSTBUILD  = fltk-config --post

## Public Targets
.PHONY:	mac macdev win windev

mac macdev:
	rm -rf $(OBJS) $(BINDIR)/$(APP) $(APP).app
	$(MAKE) TARGET=$@ $(APP)

win windev:
	del \Q $(OBJS) $(BINDIR)\$(APPWIN).exe
	$(MAKE) TARGET=$@ $(APPWIN)

## Private Targets
# MacOS(oファイルから実行ファイルとappファイル作成)
.PHONY: $(APP)
$(APP):$(OBJS)
	$(COMPILER) -o $(BINDIR)/$@ $(OBJS) $(LIBRARY_l) $(LIBRARY_L) $(LDFLAGS)
	cp $(BINDIR)/$(APP) $(APP)
	$(POSTBUILD) $(APP)
	mkdir $(APP).app/Contents/Resources
	cp ./images/$(APP).icns $(APP).app/Contents/Resources
	plutil -insert 'CFBundleIconFile' -string $(APP).icns $(APP).app/Contents/Info.plist
	rm -f $(APP)

# Windows(oファイルからexeファイル作成)
.PHONY: $(APPWIN)
$(APPWIN):$(OBJS)
	$(COMPILER) -o $(BINDIR)\$@ $(OBJS) $(LIBRARY_l) $(LIBRARY_L) $(LDFLAGS) $(ICON)