[M1 Mac, Big Sur 11.6.1, FLTK 1.3.8]
自製アプリのJavaからC++への移植にあたり、複数ソースコード・複数サブディレクトリに対応したMakefileを作成しました。参考サイトの記事がなければ何日掛かったか分かりませんね。本当に感謝です。
appファイルを作成するには、カレントディレクトリをbinに変更し、”fltk-config –post [実行ファイル]”コマンドを使います。
CMakeという便利なツールがあることを途中で知りましたが、もうMakefileを作ってしまったのでこのまま進めます。趣味としてプログラミングを楽しまれるのであればMakefileの自作をお勧めします。
これでコーディングに専念できる環境がほぼ整いました。
# コンパイラ設定他
COMPILER = clang++
DEBUG = -g
# フラグ設定
CXXFLAGS = $(shell fltk-config --use-gl --use-images --cxxflags )
LDFLAGS = $(shell fltk-config --use-gl --use-images --ldflags ) -lc++
# includeパス設定
INCLUDE = -I../include -I/opt/homebrew/Cellar/fltk/1.3.8/include
# linkパス設定
LINK = -L/opt/homebrew/Cellar/jpeg/9e/lib -L/opt/homebrew/Cellar/libpng/1.6.37/lib
# 実行ファイル設定
TARGET = test
TARGETDIR = ../bin
# ソースコードパス
SRCROOT = .
# oファイルの出力ディレクトリ
OBJROOT = ../obj
# ソースディレクトリのリスト化
SRCDIRS := $(shell find $(SRCROOT) -type d)
# ソースディレクトリから全てのcppファイルをリスト化
SOURCES = $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.cpp))
# cppファイルのリストからオブジェクトファイルをリスト化
OBJECTS = $(addprefix $(OBJROOT), $(patsubst ./%,/%,$(SOURCES:.cpp=.o)))
# oファイルの出力ディレクトリをリスト化
OBJDIRS = $(addprefix $(OBJROOT), $(patsubst ./%,/%,$(SRCDIRS)))
# cppファイルからoファイル作成
$(OBJROOT)/%.o: $(SRCROOT)/%.cpp
@if [ ! -e `dirname $@` ]; then mkdir -p `dirname $@`; fi
$(COMPILER) $(CXXFLAGS) $(INCLUDE) $(DEBUG) -o $@ -c $<
# oファイルから実行ファイル作成
$(TARGET): $(OBJECTS)
$(COMPILER) -o $(TARGETDIR)/$@ $(OBJECTS) $(LDFLAGS) $(LINK)
# 依存ファイル
-include $(DEPENDS)
# 全ソース強制コンパイル
all: clean $(TARGET)
# 全ファイル削除(cpp以外)
clean:
rm -rf $(OBJDIRS) $(DEPENDS) $(TARGETDIR)/$(TARGET)